【问题标题】:onActivityResult wont work after onBackPressedonActivityResult 在 onBackPressed 之后将不起作用
【发布时间】:2020-04-17 18:26:34
【问题描述】:

我创建了一个有 2 个屏幕的应用:Activity A(主)和 Activity B。

当用户点击活动 A 中的搜索按钮时,它会打开一个名为 Activity B 的 ListView。

在这个 ListView 中,用户有他单击的 CheckBoxes,一旦他单击 Done,结果将通过使用 onActivityResult 返回到 Activity A。

出于某种原因,假设我执行以下操作:

1) 单击活动 A 中的搜索按钮。 2) 在活动 B 中选择了 1 个项目,但没有点击完成。相反,我点击了返回按钮。 3)重新进入活动B 4)选择项目+点击完成

然后我的应用程序崩溃,因为它说结果为空。

似乎在我单击返回按钮后,onActivity 结果在活动 A 和 B 之间不起作用。

我的代码是:

  @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {

        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == 1) {
            if(resultCode == ChatActivity.RESULT_OK){

                new CountDownTimer(1000, 500) {
                    @Override
                    public void onTick(long millisUntilFinished) {
                    }
                    @Override
                    public void onFinish() {
                        confirmedBooks = (ArrayList<DiscoverBooks>)data.getSerializableExtra("confirmedItems");
                        DateInMillis = data.getLongExtra( "dateInMillis", System.currentTimeMillis());
                    }

                }.start();

            }
            if (resultCode == ChatActivity.RESULT_CANCELED) {

            }
        }
    }

和:

Btn_Done.setOnClickListener( new View.OnClickListener() {
    @Override
    public void onClick(View v) {

        Intent confirmedData = new Intent();
        confirmedData.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
        confirmedData.putExtra( "confirmedItems", (Serializable) itemsSelected );
        confirmedData.putExtra( "dateInMillis",DateInMillis );
        setResult(ChatActivity.RESULT_OK,confirmedData);

        finish();
    }
} );

注意:

我添加了 confirmedData.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); 行,因为我希望它会清除之前选择的数据,但它似乎也不太好用。

如果我在不点击返回按钮的情况下执行这些操作,则一切正常。

有什么原因吗?

谢谢!

【问题讨论】:

  • 你能添加你的完成按钮clicklistner代码
  • 抱歉,已添加。

标签: java android onactivityresult


【解决方案1】:

请检查您是否在 activity A

中使用 startActivityforResult 调用了 activity B

而且你不需要在设置结果上设置标志。你需要像这样更新它:

Btn_Done.setOnClickListener( new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent confirmedData = new Intent();
        confirmedData.putExtra( "confirmedItems", (Serializable) itemsSelected );
        confirmedData.putExtra( "dateInMillis",DateInMillis );
        setResult(ChatActivity.RESULT_OK,confirmedData);    
        finish();
    }
} );

【讨论】:

  • 是的,我用 startActivityForResult(intent,1); 调用它事实上,删除这条线似乎完成了这项工作。带来另一个错误,但解决了这个错误。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-03
  • 1970-01-01
  • 1970-01-01
  • 2011-09-11
  • 2017-06-15
  • 1970-01-01
相关资源
最近更新 更多