首页 文章

从Fragment调用startActivityForResult不会调用onActivityResult

提问于
浏览
13

我有 DialogActivityFragment 调用,用于显示带有两个图像按钮的自定义 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();
        }

在Fragment中调用 startActivityForResult

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

ActivityFragment 中调用 startActivityForResult

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

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

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

Fragment 中没有 onActivityResultonResume ,...的任何调用,或 Activity 包含 Fragment .

我尝试过的事情:

要在包含我的 FragmentFragmentActivity 中实现 onActivityResult .

要了解的事项:

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

如果我在 onClick 中执行 finish() ,则调用 DialogActivityActivity/Fragment 也会关闭,并且应用程序将返回到 Activity 之前 .

This may be the problem, I DON'T call finish() ... but if I call finish(), it exits to another Activity, not the Activity that calls 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


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

提前致谢 .

1 回答

  • 17

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

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

相关问题