startActivityForResult结果代码始终为0

时间:2015-04-25 16:58:35

标签: android android-activity

我试图将编辑后的列表从活动2恢复到活动1。 这是我的代码:

public void listDataSms(ArrayList<MySmsLog> stringList) {
    Bundle bundle = new Bundle();
    bundle.putParcelableArrayList(NUMBER_LIST, stringList);
    Intent i = new Intent(this, MyCommonListActivity.class);
    i.putExtra(WHO_INT, SMS_LOG);
    i.putExtras(bundle);
    startActivityForResult(i, SMS_LOG);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == SMS_LOG) {
        if (resultCode == RESULT_OK) {
            ArrayList<MySmsLog> mySmsLogs = (data.getParcelableArrayListExtra(PICK_SMS_LOG));
            mainLog.setSmsLog(mySmsLogs);
        } 

        if (resultCode == RESULT_CANCELED) {
            // do something if there is no result
        }
    }
}

@Override
public void onBackPressed() {
    super.onBackPressed();
    Intent intent = new Intent();
    Bundle result = new Bundle();
    switch (who) {
        case SMS_LOG:
            result.putParcelableArrayList(MainActivity.PICK_SMS_LOG, mySmsLogList);
            break;
    }

    setResult(RESULT_OK, intent);
    intent.putExtras(result);
}

但我永远不会得到setSmsLog,因为resultCode总是0。 我尝试了Android onActivityResult is always 0但没有结果。 即使我将条件更改为if (resultCode == RESULT_CANCELED) {do smth}程序也会以NullPointerException结束。

2 个答案:

答案 0 :(得分:8)

假设上面显示的代码中的onBackPressed()来自MyCommonListActivity,则称为setResult()为时已晚。最好的情况是,如果您将super.onBackPressed()作为最后一件事而不是第一件事,那么您的代码可能会有效。典型的解决方案是,一旦用户点击setResult()中的内容或以其他方式选择要使用的特定项目,就调用finish()ListView,而不是等到用户按下BACK

答案 1 :(得分:1)

尝试放置super.onBackPressed();在intent.putExtras(结果)之后;