从另一个 Activity 返回到 Activity-A 的特定片段

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-FragmentMessage-Fragment我将不胜感激。这些是分开的问题。希望你能帮忙。

我通过添加到 backstack 来打开片段addToBackStack(fragmentTag)

编辑:VideoPreview-Fragment 必须是 VideoPreview-Activity,VidoTrim-Fragment 必须是 VideoTrim-Activity。这些是活动。就像你在图片上看到的那样。

Gap*_*app 6

如果我正确理解一切,我想我有一个解决方案。我会忽略导航的所有其他方面,只是专注于你想从去其实VideoPreviewActivityMainActivity并调整片段栈,而这正从一个完成按钮(或类似的东西),但不能后退按钮触发。

简单的方法是使用活动结果函数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)