onActivityResult从Adapter传递Intent时,Intent为null

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)

ישו*_*ותך 5

首先,您需要使用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)