按BACK按钮时,setResult不起作用

我正在按BACK按钮后尝试设置结果。 我打电话给onDestroy

Intent data = new Intent();
setResult(RESULT_OK, data) 

但是当涉及到

onActivityResult(int requestCode, int resultCode, Intent data) 

resultCode为0(RESULT_CANCELED),数据为'null'。

那么,我怎样才能通过BACK按钮终止活动的结果呢?


您需要覆盖onBackPressed()方法并在调用超类之前设置结果,即

@Override
public void onBackPressed() {
    Bundle bundle = new Bundle();
    bundle.putString(FIELD_A, mA.getText().toString());

    Intent mIntent = new Intent();
    mIntent.putExtras(bundle);
    setResult(RESULT_OK, mIntent);
    super.onBackPressed();
}

Activity结果必须 finish()被调用之前设置。 单击BACK实际上会在您的activity调用finish() ,因此您可以使用以下片段:

@Override
public void finish() {
    Intent data = new Intent();
    setResult(RESULT_OK, data); 

    super.finish();
}

如果您调用NavUtils.navigateUpFromSameTask();onOptionsItemSelected()finish()被调用,但你会得到错误的result code 。 所以你必须在onOptionsItemSelected()调用finish()而不是navigateUpFromSameTask 。 onActivityResult中的错误requestCode


如果你想在onBackPressed事件中设置一些自定义的RESULT_CODE ,那么你需要先设置result ,然后调用super.onBackPressed()并且你将在调用者活动的onActivityResult方法中收到相同的RESULT_CODE

    @Override
    public void onBackPressed()
    {
         setResult(SOME_INTEGER);
         super.onBackPressed();
    }
链接地址: http://www.djcxy.com/p/31895.html

上一篇: setResult does not work when BACK button pressed

下一篇: How to access count property of a dynamic type in C# 4.0?