startActivityForResult结果代码始终为0

pre*_*evi 3 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);
}
Run Code Online (Sandbox Code Playgroud)

但我从来没有setSmsLog因为resultCode始终0.我试过Android onActivityResult总是0,但没有结果.即使我改变我的条件到 if (resultCode == RESULT_CANCELED) {do smth}程序结束NullPointerException.

Com*_*are 8

假设onBackPressed()从上面显示的代码来自MyCommonListActivity,那就太迟了setResult().充其量,如果你打电话super.onBackPressed()给最后一件事,你的代码可能会工作,而不是第一件事.典型的解决方法是调用setResult(),并finish()为用户在东西水龙头尽快ListView或以其他方式选择特定项目的工作,而不是等到用户按下BACK.

  • 我移动了那个super.onBackPressed(),它现在正在工作!我知道使用BACK不是那么好的解决方案,但不幸的是我在这个例子中需要它.谢谢!还有一个问题,为什么我的方法中应该是super.onBackPressed()最后一件事? (2认同)