从Fragment调用startActivityForResult不会调用onActivityResult

时间:2012-12-11 17:20:42

标签: android android-intent android-fragments android-activity

我有一个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);

调用Activity的{​​{1}}和Fragment

startActivityForResult

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

@Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); } onActivityResult包含onResume中,FragmentActivity,...没有任何电话。

我尝试过的事情:

在包含Fragment的{​​{1}}和onActivityResult中实施Fragment

要知道的事情:

我在每个Activity设置属性Fragment

如果我在noHistory=trueActivity finish(),那么调用onClick的{​​{1}}也会关闭,应用程序将返回到Activity/Fragment之前。

这可能是问题,我不打电话给DialogActivity ...但是如果我拨打Activity,则会退出到另一个finish(),而不是{{1}调用finish()

我检查的链接:

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


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

提前致谢。

1 个答案:

答案 0 :(得分:17)

具有属性noHistory=true的活动在通过onActivityResult()启动新Activity时永远不会调用startActivityForResult()。正如documentation提到的那样,当noHistory属性设置为true时,当用户导航离开{finish()时,Activity会调用Activity 1}}。

因此,当startActivityForResult()被调用时,导航Activity会导致finish()被调用,并使其永远不会接到onActivityResult()的来电。如果您从正在调用noHistory=true的{​​{1}}中移除Activity属性,请在startActivityForResult()的{​​{1}}中致电finish(),那么您应该仍然可以看到启动它的DialogActivity,以及接听onClick()的电话。