从适配器传递 Intent 时,onActivityResult Intent 为 null
onActivityResult Intent is null when passing Intent from Adapter
我在返回带有结果的 Activity 时遇到了一个奇怪的问题,我正在从这样的适配器传递 startActivityForResult
的 Intent :
Intent i = new Intent(activity, EditInfoActivity.class);
i.putExtra("id", list.get(position).getID());
activity.startActivityForResult(i, 100);
和第二个 Activity 即在 EditInfoActivity 中,在我的例子中点击 Button
我正在为第一个 activity 设置结果,如下所示:
Intent i = getIntent();
i.putExtra("isDataChange", isDataChange);
setResult(100, i);
finish();
在 Activity 的 onActivityResult
方法中,我能够获得结果代码,但得到 Intent
null
。
为什么?任何人对此有任何想法请分享。
在Activity中:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 100) {
//Here data is null and app crash
if (data.getExtras() != null && data.getBooleanExtra("isDataChange", false)) {
recreate();
}
}
}
setResult
采用 RESULT_CODE
而不是 REQUEST_CODE.
用这个替换你的代码,也许它会解决你的问题。
setResult(RESULT_OK, i);
还有你onActivityResult
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
//Here data is null and app crash
if (data != null && data.getBooleanExtra("isDataChange", false)) {
recreate();
}
}
}
首先,您需要使用 REQUEST_CODE:
启动 Activity
// Here we set a constant for the code.
private final int REQUEST_CODE = 100;
Intent i = new Intent(activity, EditInfoActivity.class);
i.putExtra("id", list.get(position).getID());
activity.startActivityForResult(i, REQUEST_CODE);
那么在完成EditInfoActivity时需要发送RESULT_OK:
Intent i = getIntent();
i.putExtra("isDataChange", isDataChange);
setResult(RESULT_OK, i);
finish();
然后在你的第一个 activity 上处理结果:
Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// REQUEST_CODE is defined as 100
if (resultCode == RESULT_OK && requestCode == 100) {
// do process
}
}
两个错误。您正在传递用于启动您正在完成的 activity 的意图。请改用 new Intent()
。
当设置 activity 结果时,您应该使用结果代码,而不是请求代码 setResult(RESULT_OK)
或者 RESULT_CANCELED
并相应地处理响应。
我在返回带有结果的 Activity 时遇到了一个奇怪的问题,我正在从这样的适配器传递 startActivityForResult
的 Intent :
Intent i = new Intent(activity, EditInfoActivity.class);
i.putExtra("id", list.get(position).getID());
activity.startActivityForResult(i, 100);
和第二个 Activity 即在 EditInfoActivity 中,在我的例子中点击 Button
我正在为第一个 activity 设置结果,如下所示:
Intent i = getIntent();
i.putExtra("isDataChange", isDataChange);
setResult(100, i);
finish();
在 Activity 的 onActivityResult
方法中,我能够获得结果代码,但得到 Intent
null
。
为什么?任何人对此有任何想法请分享。
在Activity中:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 100) {
//Here data is null and app crash
if (data.getExtras() != null && data.getBooleanExtra("isDataChange", false)) {
recreate();
}
}
}
setResult
采用 RESULT_CODE
而不是 REQUEST_CODE.
用这个替换你的代码,也许它会解决你的问题。
setResult(RESULT_OK, i);
还有你onActivityResult
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
//Here data is null and app crash
if (data != null && data.getBooleanExtra("isDataChange", false)) {
recreate();
}
}
}
首先,您需要使用 REQUEST_CODE:
启动 Activity// Here we set a constant for the code.
private final int REQUEST_CODE = 100;
Intent i = new Intent(activity, EditInfoActivity.class);
i.putExtra("id", list.get(position).getID());
activity.startActivityForResult(i, REQUEST_CODE);
那么在完成EditInfoActivity时需要发送RESULT_OK:
Intent i = getIntent();
i.putExtra("isDataChange", isDataChange);
setResult(RESULT_OK, i);
finish();
然后在你的第一个 activity 上处理结果:
Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// REQUEST_CODE is defined as 100
if (resultCode == RESULT_OK && requestCode == 100) {
// do process
}
}
两个错误。您正在传递用于启动您正在完成的 activity 的意图。请改用 new Intent()
。
当设置 activity 结果时,您应该使用结果代码,而不是请求代码 setResult(RESULT_OK)
或者 RESULT_CANCELED
并相应地处理响应。