Android - 在 activity 上设置 activity 结果关闭

Android - set activity result on activity closed

开始 activity 结果:

Intent intent = new Intent(MainActivity.this, DetailsActivity.class);
startActivityForResult(intent,EVENT_DETAILS_REQUEST);

在我的 DetailsActivity 中,设置结果和附加功能,可以在主程序中使用 activity:

@Override
    public void onBackPressed()
    {
        Intent resultIntent = new Intent();
        resultIntent.putExtra("isEdited",isEdited);
        setResult(RESULT_OK,resultIntent);
        finish();
    }

最后,在 MainActivity 中:

@Override
    protected void onActivityResult(int requestCode, int resultCode, @NonNull Intent data)
{
  switch(requestCode)
  {
    ......
    case EVENT_DETAILS_REQUEST:
    boolean isEdited = data.getBooleanExtra("isEdited", false);
    .......
    break;

  }

}

只要用户使用 "Back" 硬件(或系统导航栏)按钮关闭 DetailsActivity,就可以了。如果用户点击 activity 顶部的 "Back" 箭头关闭 activity,onBackPressed 将不会被调用并且 onActivityResult 数据将为空。

我尝试使用 onPauseonStoponFinish 而不是 onBackPressed 来管理它的工作,但我得到 data onActivityResult 始终为空。

解决我的问题的正确方法是什么?

@Override
public boolean onOptionsItemSelected(MenuItem item)
{
    switch (item.getItemId())
    {
        case android.R.id.home:
            onBackPressed();
            return true;

        default:
            return super.onOptionsItemSelected(item);
    }
}

在您的详细信息中覆盖此方法activity...和此代码

将此添加到您的 DetailsActivity

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();
        if (id == android.R.id.home) {
       Intent resultIntent = new Intent();
        resultIntent.putExtra("isEdited",isEdited);
        setResult(RESULT_OK,resultIntent);
            finish();
        }
        return super.onOptionsItemSelected(item);
    }

这会在硬件反压时自动调用..

public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {

             //your code here   

            return true;
        }
        return super.onKeyDown(keyCode, event);
    }

您可以这样做以在所有可能的关闭情况下发送结果:

@Override
public void finish() {
    Intent data = new Intent();
    Intent resultIntent = new Intent();
    resultIntent.putExtra("isEdited", isEdited);
    setResult(RESULT_OK, resultIntent);
    super.finish();
}