调用 startActivityForResult from Fragment 不调用 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);

ActivityFragment中,调用startActivityForResult

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
}

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

没有任何呼唤onActivityResultonResume,...在FragmentActivity中包含Fragment.

我尝试过的事情:

要在包含我的FragmentFragmentActivity中实现onActivityResult

须知事项:

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

如果我onClickfinish()调用DialogActivityActivity/Fragment也会关闭,应用程序返回到之前的Activity

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

我检查的链接:

startActivityForResult() don't call to onActivityResult(int requestCode, int resultCode, Intent data)?

无法触发 onActivityResult() android?

startActivityForResult 似乎没有调用 onActivityResult

onActivityResult 从未被调用

Android onActivityResult 从未调用

onActivityResult() 当活动从片段启动时未调用


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

提前谢谢。

具有属性noHistory=true的活动在通过startActivityForResult()启动新Activity时永远不会调用其onActivityResult()。如文档所述,当noHistory属性设置为true时,当用户导航离开Activity时,将在Activity上调用finish()

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

完成结果后关闭所有活动。 例如,在被覆盖的 onActivityResult 中,您可以添加 finishActivity (Activity 1..N)。不要忘记将每个放在尝试捕获下。

最新更新