从Fragment调用startActivityForResult不会调用onActivityResult

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从Fragment调用startActivityForResult不会调用onActivityResult相关的知识,希望对你有一定的参考价值。

我有一个DialogActivity,从Fragment调用显示自定义Dialog与两个图像按钮。

DialogActivity.onCreate

final Dialog dialog = new Dialog(this, R.style.DialogTheme);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.dialog_pause); 
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
dialog.show();

DialogActivity.onClick

        @Override
        public void onClick(View v) {
            Log.d(LOGTAG, "onClick CONTINUE");

            Intent resultData = new Intent();
            resultData.putExtra("TEST", "return data");
            setResult(666, resultData);
            dialog.cancel();
        }

在片段中调用startActivityForResult

Intent dialogActivityIntent = new Intent(getActivity(), DialogActivity.class);
startActivityForResult(dialogActivityIntent, 999);

在称为ActivityFragmentstartActivityForResult中:

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

    super.onActivityResult(requestCode, resultCode, data);
}

当我单击按钮时,我只获得对话框取消并显示背景活动(片段)。

onActivityResultonResume中没有任何关于FragmentActivity,......的调用包含Fragment

我试过的事情:

要在包含我的onActivityResultFragmentActivity中实现Fragment

要知道的事情:

我在每个noHistory=true中设置属性Activity

如果我在finish()onClick那个叫Activity/FragmentDialogActivity也被关闭了,应用程序返回到之前的Activity

这可能是问题,我不打电话给finish() ...但如果我打电话给finish(),它会退出到另一个Activity,而不是Activity称为startActivityForResult

我检查的链接:

startActivityForResult() dont call to onActivityResult(int requestCode, int resultCode, Intent data)?

Cannot get to trigger onActivityResult() android?

startActivityForResult doesn't seem to call onActivityResult

onActivityResult never called

Android onActivityResult NEVER called

onActivityResult() not called when Activity started from Fragment


我希望一切都清楚地解释^^。

提前致谢。

答案

具有noHistory=true属性的活动在通过onActivityResult()启动新的Activity时将永远不会调用它们的startActivityForResult()。正如documentation所提到的,当noHistory属性设置为true时,当用户离开finish()时,Activity被调用在Activity上。

因此,当startActivityForResult()被调用时,Activity被导航离开,导致其finish()被调用并使其永远不会接到对onActivityResult()的调用。如果从正在调用noHistory=trueActivity中删除startActivityForResult()属性,然后在你的finish()DialogActivity中调用onClick(),那么你仍然应该看到启动它的Activity,以及接到对onActivityResult()的调用。

以上是关于从Fragment调用startActivityForResult不会调用onActivityResult的主要内容,如果未能解决你的问题,请参考以下文章

从Fragment调用startActivityForResult不会调用onActivityResult

从 Fragment 开始ActivityForResult() 并完成子 Activity,不会在 Fragment 中调用 onActivityResult()

Kotlin:如何从 Fragment 调用 JobIntentService?

从 Fragment 类调用 Web 服务(API)的正确方法

Android:从 viewPager 中的 Fragment 为 ListView 的适配器调用 getview()

从后台弹出时不调用 Fragment 的 onResume()