从 Fragment 调用 startActivityForResult 不会调用 onActivityResult
Posted
技术标签:
【中文标题】从 Fragment 调用 startActivityForResult 不会调用 onActivityResult【英文标题】:Call startActivityForResult from Fragment doesn't call onActivityResult 【发布时间】:2012-11-29 07:13:23 【问题描述】:我有一个从 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
的片段中:
Intent dialogActivityIntent = new Intent(getActivity(), DialogActivity.class);
startActivityForResult(dialogActivityIntent, 999);
在调用startActivityForResult
的Activity
和Fragment
中:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
super.onActivityResult(requestCode, resultCode, data);
当我单击按钮时,我只会取消对话框并显示后台活动(片段)。
在Fragment
或Activity
中没有任何对onActivityResult
、onResume
、...的调用包含Fragment
。
我尝试过的事情:
在包含我的Fragment
的Fragment
和Activity
中实现onActivityResult
。
须知:
我在每个Activity
中设置了属性noHistory=true
。
如果我在onClick
中执行finish()
,则调用DialogActivity
的Activity/Fragment
也将关闭,并且应用程序返回到之前的Activity
。
这可能是问题所在,我不调用finish()
...但是如果我调用finish()
,它会退出到另一个Activity
,而不是调用Activity
的Activity
。
我检查的链接:
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
我希望一切都解释清楚^^。
提前致谢。
【问题讨论】:
尝试getActivity().startActivityForResult(dialogActivityIntent, 999);
并在托管Fragment
的Activity
中捕获结果
我已经尝试过了,代码是在发布我的问题前一分钟。谢谢 :(
你想要得到结果的Activity
是否在清单文件中将android:launchMode
指定为singleInstance
或singleTask
?
看到这个链接可能对你有帮助:androidtutorialonline.com/onactivityresult-in-fragment
【参考方案1】:
具有noHistory=true
属性的活动在通过startActivityForResult()
启动新的Activity
时将永远不会调用其onActivityResult()
。正如documentation 所述,当noHistory
属性设置为true
时,当用户离开Activity
时,finish()
会在Activity
上调用。
所以,当startActivityForResult()
被调用时,Activity
被导航离开,导致其finish()
被调用并使其永远不会收到对onActivityResult()
的调用。如果您从调用startActivityForResult()
的Activity
中删除noHistory=true
属性,然后在您的DialogActivity
的onClick()
中调用finish()
,那么您仍然应该看到启动它的Activity
接听电话到onActivityResult()
。
【讨论】:
对不起,迟到的评论...几天后,我按照您所说的解决了这个问题。谢谢! 太棒了@ashu ..它首先解决了我的两个问题 【参考方案2】:完成结果后关闭所有活动。 例如,在您覆盖的 onActivityResult 中,您可以添加 finishActivity(活动 1..N)。不要忘记将每个都放在 try catch 之下。
【讨论】:
您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。 这没有提供问题的答案。一旦你有足够的reputation,你就可以comment on any post;相反,provide answers that don't require clarification from the asker。 - From Review以上是关于从 Fragment 调用 startActivityForResult 不会调用 onActivityResult的主要内容,如果未能解决你的问题,请参考以下文章
从Fragment调用startActivityForResult不会调用onActivityResult
从 Fragment 开始ActivityForResult() 并完成子 Activity,不会在 Fragment 中调用 onActivityResult()
Kotlin:如何从 Fragment 调用 JobIntentService?
从 Fragment 类调用 Web 服务(API)的正确方法