问题描述
我正在尝试从另一个活动中调用方法。 此方法内部有一个 Intent,我确信问题出在 Intent 的上下文中。 我读了一些类似的答案,但我做不到......我得到一个 nullpointerException
活动A
这是具有意图的方法......
public void startGreetingRecorder() {
Intent recordIntent = new Intent(this, NewActivity.class);
.
.
startActivityForResult(recordIntent,);
}
活动B
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int itemId = item.getItemId();
if (itemId == R.id.menu_save) {
ActivityA.startGreetingRecorder();
}
return true;
}
这是我正在尝试但不工作。
活动A
这是具有意图的方法......
public void startGreetingRecorder(Context context) {
Intent recordIntent = new Intent(context, NewActivity.class);
.
.
startActivityForResult(recordIntent,);
}
活动B
受保护的上下文上下文;
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int itemId = item.getItemId();
if (itemId == R.id.menu_save) {
ActivityA.startGreetingRecorder(context);
}
return true;
}
1楼
您正在静态调用该方法,因此您需要将该方法标记为静态并发送上下文。
活动A:(接收者)
public static void startGreetingRecorder(final Activity a) {
Intent recordIntent = new Intent(a, NewActivity.class);
.
.
a.startActivityForResult(recordIntent,<SomeInteger>);
}
活动 B:(调用者)
[编辑] - 添加了整数参数。 这用于处理结果。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int itemId = item.getItemId();
if (itemId == R.id.menu_save) {
ActivityA.startGreetingRecorder(this);
}
return true;
}
如果您实际上不需要处理结果,则可以使用context.startActivity(intent)
2楼
你不能通过这种方式从其他 Activity 调用和活动方法,你可以使用 EventBus 来实现活动之间的通信。
尝试使用