fth*_*ins 4 android android-intent android-fragments android-activity
我打开Message-FragmentfromActivity-A然后打开Camera-Fragmentfrom Message-Fragment。现在当前片段是Camera-Fragment,我有媒体滑块。现在我有两个选项,一个是ImagePreview-Fragment如果我单击媒体滑块上的图像项就会打开。另一个是VideoPreview-Activity如果单击媒体滑块上的视频项目打开。所以有一个条件是点击video-item。如果我点击媒体滑块和视频大小的视频产品大于10 MB,我打开VideoTrim-Activity,并完成装饰,当我打电话VideoPreview-Activity。
我正在从VideoPreview-Activity或发送媒体ImagePreview-Fragment。所以当我发送媒体时,我想返回Message-Fragment数据。
我如何返回Message-Fragmentfrom VideoPreview-Activity(从 Camera-FragmentVideoPreview-Activity打开)和(从 中打开VideoTrim-Activity)。另外,如果您能帮助我了解如何返回ImagePreview-Fragment,Message-Fragment我将不胜感激。这些是分开的问题。希望你能帮忙。
我通过添加到 backstack 来打开片段addToBackStack(fragmentTag)。
编辑:VideoPreview-Fragment 必须是 VideoPreview-Activity,VidoTrim-Fragment 必须是 VideoTrim-Activity。这些是活动。就像你在图片上看到的那样。
如果我正确理解一切,我想我有一个解决方案。我会忽略导航的所有其他方面,只是专注于你想从去其实VideoPreviewActivity到MainActivity并调整片段栈,而这正从一个完成按钮(或类似的东西),但不能后退按钮触发。
简单的方法是使用活动结果函数startActivityForResult,它允许您使用onActivityResult主活动中的函数将信息传回。但是,您可能会导航到VideoPreviewActivityvia ,VideoTrimActivity因此您必须通过两个活动将此信息传回,这会有点混乱。
所以我提出的解决方案有几个步骤。
而不是调用的finish()关于VideoPreviewActivity火灾的意图创建MainActivity
Intent intent = new Intent(context, HomeActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
intent.putExtra()//Add your return data here
startActivity(intent)
Run Code Online (Sandbox Code Playgroud)
而不是开始一个新的,MainActivity这会让你回到上一个并完成任务任务中位于它上面的所有活动。
将此功能添加到MainActivity.
@Override
protected void onNewIntent(Intent intent) {
setIntent(intent);
}
Run Code Online (Sandbox Code Playgroud)
然后在该onStart函数中,您可以检查您的意图,以查看其中是否有返回的数据VideoPreview并删除您不再需要的片段。
if (getIntent().hasExtra(YOUR_DATA)) {
if (getSupportFragmentManager().getBackStackEntryCount() > 0)
getSupportFragmentManager(). popBackStackImmediate("MESSAGE_TAG", 0);
}
Run Code Online (Sandbox Code Playgroud)
其中“MESSAGE_TAG”是ft.addToBackStack("MESSAGE_TAG")调用中使用的标签。
这将清除addToBackStack事务中带有 的所有片段。该MessageFragment会重新开始其生命周期的调用,您可以从访问数据
getActivity().getIntent()
Run Code Online (Sandbox Code Playgroud)