我在返回带有结果的Activity时面临一个奇怪的问题,我正在从这样的适配器传递Intent i = new Intent(activity, EditInfoActivity.class);
i.putExtra("id", list.get(position).getID());
activity.startActivityForResult(i, 100);
的Intent:
Button
并且在第二个Activity中,即在Intent i = getIntent();
i.putExtra("isDataChange", isDataChange);
setResult(100, i);
finish();
点击的情况下,在我的情况下在EditInfoActivity中,我正在设置第一个活动的结果,如下所示:
onActivityResult
在活动的Intent
方法中,我可以获得结果代码,但获得null
@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();
}
}
}
。
为什么呢?任何人都对此有任何想法请分享。
在活动中:
{{1}}
答案 0 :(得分:5)
首先,您需要使用 REQUEST_CODE 启动活动:
// 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();
然后使用此处理第一个活动的结果:
Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// REQUEST_CODE is defined as 100
if (resultCode == RESULT_OK && requestCode == 100) {
// do process
}
}
答案 1 :(得分:3)
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();
}
}
}
答案 2 :(得分:2)
两个错误。您正在传递用于启动您正在完成的活动的意图。请改用new Intent()
。
设置活动结果时,您应该使用结果代码,而不是请求代码setResult(RESULT_OK)
或RESULT_CANCELED
,并相应地处理响应。