从适配器传递Intent时,onActivityResult Intent为空

6

当我尝试通过结果返回到一个Activity时,遇到了一个奇怪的问题。我从适配器传递了一个Intent给startActivityForResult方法,如下所示:

Intent i = new Intent(activity, EditInfoActivity.class);
i.putExtra("id", list.get(position).getID());
activity.startActivityForResult(i, 100);

在第二个Activity中,也就是我这里的EditInfoActivity中,当用户点击一个时,我会像这样为第一个Activity设置结果:

Intent i = getIntent();
i.putExtra("isDataChange", isDataChange);
setResult(100, i);
finish();

在Activity的onActivityResult方法中,我能够获得结果代码,但是获取到的Intentnull
为什么?有人对此有任何想法请分享。
在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();
    }
  }
}
3个回答

6

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

然后在你的第一个活动中使用以下代码来处理结果:

Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  // REQUEST_CODE is defined as 100
  if (resultCode == RESULT_OK && requestCode == 100) {
     // do process
  }
}

4

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

两个错误。你正在传递用于启动正在结束的活动的意图。改为使用new Intent()

在设置活动结果时,应该使用结果代码而不是请求代码setResult(RESULT_OK)RESULT_CANCELED并相应处理响应。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接