【问题标题】:Android - set activity result on activity closedAndroid - 在活动关闭时设置活动结果
【发布时间】:2018-01-24 13:22:32
【问题描述】:

开始活动以获得结果:

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

在我的 DetailsActivity 中,设置可用于主要活动的结果和额外内容:

@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;

  }

}

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

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

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

【问题讨论】:

  • 在清单文件中使用 android:launchMode="singleTop"..
  • 它已经在那里了。
  • 请粘贴您的 onOptionsItemSelected 代码。
  • 它不存在。我应该在onOptionsItemSelected 中捕获返回箭头吗?要检查什么 id?
  • 见下面 Manoj 的回答。

标签: java android onactivityresult onpause onbackpressed


【解决方案1】:
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
    switch (item.getItemId())
    {
        case android.R.id.home:
            onBackPressed();
            return true;

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

在您的详细活动中覆盖此方法...以及此代码

【讨论】:

  • 完美答案,谢谢。我不知道在哪里捕获活动返回箭头按下事件。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    将此添加到您的 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);
        }
    

    【讨论】:

      【解决方案4】:

      这在硬件回压时自动调用..

      public boolean onKeyDown(int keyCode, KeyEvent event) {
              if (keyCode == KeyEvent.KEYCODE_BACK) {
      
                   //your code here   
      
                  return true;
              }
              return super.onKeyDown(keyCode, event);
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-09-23
        • 2013-02-18
        • 1970-01-01
        • 1970-01-01
        • 2013-03-17
        • 2010-12-02
        • 2021-09-04
        相关资源
        最近更新 更多