按下BACK按钮时,setResult不起作用

ale*_*2k8 104 android

我按下BACK按钮后尝试setResult.我打电话给onDestroy

Intent data = new Intent();
setResult(RESULT_OK, data) 
Run Code Online (Sandbox Code Playgroud)

但是当涉及到

onActivityResult(int requestCode, int resultCode, Intent data) 
Run Code Online (Sandbox Code Playgroud)

resultCode为0(RESULT_CANCELED),数据为"null".

那么,如何通过BACK按钮终止活动传递结果?

小智 152

你需要覆盖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();
}
Run Code Online (Sandbox Code Playgroud)

  • 请注意,如果您使用此方法,super.onBackPressed()调用必须在调用setResult()之后发生,如上所示,否则您将再次遇到原始问题! (19认同)
  • 我实施了类似的方法但它仍然无法正常工作.实例我有请求代码和意图工作,但resultCode始终为0. (5认同)

JBM*_*JBM 66

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

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

    super.finish();
}
Run Code Online (Sandbox Code Playgroud)

如果你打电话NavUtils.navigateUpFromSameTask();onOptionsItemSelected(),finish()是所谓的,但你会得到错误的result code.所以,你必须调用finish()没有navigateUpFromSameTaskonOptionsItemSelected(). onActivityResult中的requestCode错误

  • @pjv - 我不明白你的观点,'完成'与`onPause`和`onDestroy`有什么关系?那些完全没有关系,除了`finish`开始终止过程,`onPause`和`onDestroy`是其中的一部分. (5认同)

Khu*_*zad 18

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

    @Override
    public void onBackPressed()
    {
         setResult(SOME_INTEGER);
         super.onBackPressed();
    }
Run Code Online (Sandbox Code Playgroud)


ale*_*2k8 9

我重构了我的代码.起初,我准备了一些数据,并将其设置为activity resultonDestroy(这不工作).现在我activity每次更新要返回的数据时都会设置数据,并且没有任何内容onDestroy.