android - 从 Fragment 调用 startActivityForResult 不会调用 onActivityResult

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

我有一个从 Fragment 调用的 DialogActivity,用于显示带有两个图像按钮的自定义 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 的 Fragment 中:

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

Activity 和调用 startActivityForResultFragment 中:

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

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

当我点击按钮时,我只会取消对话框并显示后台 Activity ( fragment )。

FragmentActivity 中没有对 onActivityResultonResume 的任何调用> 包含 fragment

我尝试过的事情:

要在 Fragment 和包含我的 FragmentActivity 中实现 onActivityResult

须知:

我在我拥有的每个 Activity 中都设置了属性 noHistory=true

如果我在 onClick 中执行 finish() 调用 DialogActivityActivity/Fragment 也会关闭,然后应用程序返回到之前的 Activity

这可能是问题所在,我不调用 finish() ... 但如果我调用 finish(),它会退出到另一个 Activity,而不是调用 startActivityForResultActivity

我检查过的链接:

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 的 Activity 在通过 startActivityForResult 启动新的 Activity 时永远不会调用它们的 onActivityResult() ()。作为documentation提到,当 noHistory 属性设置为 true 时,finish()Activity 上被调用用户离开 Activity

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

关于android - 从 Fragment 调用 startActivityForResult 不会调用 onActivityResult,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13825254/

相关文章:

java - 从字符串中删除除最后 n 个字符之外的所有字符

android - 带异步任务和自定义适配器的 ListFragment

android - 如何将 BottomNavigationView 项目的点击限制为仅一次,而不是重新加载 fragment ?

android - media.session.MediaController 和 android.widget.MediaController 有什么区别?

用于 NFC 读取器/写入器的 Android 库/API

android - 从url打开后如何清除 Activity 中的 Intent 数据?

java - Android - 导航到上一个屏幕

java - Intent 后抽屉导航检查错误

android - 如何在 Android 中使用 Fragments

Android GridLayout.Spec