Kap*_*put 5 android android-intent onactivityresult
我在返回带有Result的Activity时面临一个奇怪的问题,我startActivityForResult从这样的适配器传递一个Intent :
Intent i = new Intent(activity, EditInfoActivity.class);
i.putExtra("id", list.get(position).getID());
activity.startActivityForResult(i, 100);
Run Code Online (Sandbox Code Playgroud)
在第二个Activity中,即在我的情况下在EditInfoActivity中Button单击,我为第一个活动设置Result,如下所示:
Intent i = getIntent();
i.putExtra("isDataChange", isDataChange);
setResult(100, i);
finish();
Run Code Online (Sandbox Code Playgroud)
在Activity的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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
首先,您需要使用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);
Run Code Online (Sandbox Code Playgroud)
然后,你需要发送RESULT_OK整理EditInfoActivity时:
Intent i = getIntent();
i.putExtra("isDataChange", isDataChange);
setResult(RESULT_OK, i);
finish();
Run Code Online (Sandbox Code Playgroud)
然后使用以下方法处理第一个活动的结果:
Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// REQUEST_CODE is defined as 100
if (resultCode == RESULT_OK && requestCode == 100) {
// do process
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7638 次 |
| 最近记录: |