如何通过按返回返回到上一个片段?

     2023-04-15     297

关键词:

【中文标题】如何通过按返回返回到上一个片段?【英文标题】:How to return to previous fragment by pressing back? 【发布时间】:2020-06-08 03:09:21 【问题描述】:

我正在使用导航抽屉导航到许多不同的片段。在少数情况下,一些片段被放置在其他片段之上。但是,当我按下后退按钮将我带到上一个片段时,它会回到主片段。

MapFragment.java

img.setOnClickListener(new View.OnClickListener() 
            @Override
            public void onClick(View v) 
                FragmentTransaction fr = getFragmentManager().beginTransaction();
                fr.replace(R.id.navHostFragment, new ImgMapFragment()).addToBackStack(null);
                fr.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
                fr.addToBackStack(null);
                fr.commit();

如何做到这一点,以便当我打开 ImgMapFragment 时,我可以返回到我所在的上一个片段而不是 HomeFragment

【问题讨论】:

如果你可以处理它,你应该使用导航组件。 developer.android.com/guide/navigation/… 如果你使用addToBackStack(null)一次,它应该像onBackPressed一样简单正确处理 @EpicPandaForce 是的,我只有一次。我不确定它是怎么回事。出于某种原因,它只是将我送回主片段而不是地图片段? @MuratÇakır 是的,我正在使用导航。但是我不明白当我从 HomeFragment->MapFragment->ImgMapFragment 去按返回键时,为什么会去 imgMapFragment->HomeFragment,而不是 imgMapFragment->MapFragment? 您的样本中有两次:P 【参考方案1】:

看看getFragmentManager().popBackStack()的方法(有几种可供选择)

http://developer.android.com/reference/android/app/FragmentManager.html#popBackStack()

【讨论】:

【参考方案2】:

AndroidProButNo 是一个新的贡献者。友善点,看看我们的Code of Conduct。

由于 Navigation 组件固有的复杂性,考虑到您需要了解 Navigation 组件、如何使用它以及它试图从您身上隐藏什么,这个问题实际上比最初看起来要复杂得多,因此如果您已经在使用 Navigation 组件,则不应尝试使用它。

导航组件在内部使用FragmentNavigator,而FragmentNavigator 是执行与destination 的ID (R.id.destination[...]) 相关联的Action。 NavHostFragment 托管此 Navigator,您可以通过 Navigation 组件的 NavController 使基于 Fragment 的导航工作。

因此,要“返回”当一个选择使用NavHostFragment时,需要使用导航组件来定义所有片段目标,在所述片段目的地之间移动的操作,然后弹出属于的备份NavController(将在内部管理 FragmentManager)。

看起来像这样

main_activity.xml 布局

<FrameLayout android:layout_ 
             android:layout_>

    <fragment
        android:id="@+id/nav_host_fragment"
        android:name="androidx.navigation.fragment.NavHostFragment"
        android:layout_
        android:layout_

        app:defaultNavHost="true"
        app:navGraph="@navigation/nav_graph" />
</FrameLayout>

还有navigation.xml

<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
                xmlns:app="http://schemas.android.com/apk/res-auto"
                android:id="@+id/nav_graph"
                app:startDestination="@id/blankFragment">

    <fragment
        android:id="@+id/firstFragment"
        android:name="com.example.navigationexample.FirstFragment"
        android:label="First Fragment"
        tools:layout="@layout/first_fragment" >

        <action
            android:id="@+id/action_first_to_second"
            app:destination="@id/secondFragment" />
    </fragment>

    <fragment
        android:id="@+id/secondFragment"
        android:name="com.example.navigationexample.SecondFragment"
        android:label="Second Fragment"
        tools:layout="@layout/second_fragment" />

</navigation>

然后要从一个屏幕导航到另一个屏幕,您需要这样做

try 
    Navigation.findNavController(view).navigate(R.id.action_first_to_second);
 catch(Exception e) 

要返回,你必须这样做

try 
    Navigation.findNavController(view).popBackstack();
 catch(Exception e) 

由于您在这种情况下使用 Navigation 组件,因此您不应该手动管理 FragmentTransactions,因为它会使 Navigation 组件的 backstack 不一致。

理论上,如果您正确执行此操作,那么导航组件应该已经正确处理了 onBackPressed,因为我相信他们将自己注册为 OnBackPressedDispatcher,并且不必委托手动结束后退事件。

【讨论】:

从片段返回到上一个活动 onclick back button

...clickbackbutton【发布时间】:2015-05-2505:35:02【问题描述】:如何从片段返回到上一个活动?我不能在片段中覆盖这个函数或者有其他方法,帮助!@OverridepublicvoidonBackPressed()onBackPressed();【问题讨论】:您是否有 查看详情

androidtransactionfragment时按返回键直接退出,没有返回到上一个fragment

...了一个Fragment切换到查看照片的Fragment,查看完照片按返回键没有按常规流程回到上一个碎片,而是直接退出APP了。解决方案:删除父fragment下的包android.app.Fragment(如果包含了的话),改成兼容包android.suppo... 查看详情

Android:返回到上一个片段后按

】Android:返回到上一个片段后按【英文标题】:Android:Returntopreviousfragmentonbackpress【发布时间】:2014-10-1014:30:33【问题描述】:我已经实现了导航抽屉,它是Activity的子类。我的应用程序中有很多片段。我的问题在这里假设有3个... 查看详情

如何检测是不是按下了向上按钮

】如何检测是不是按下了向上按钮【英文标题】:HowtodetectiftheUpbuttonwaspressed如何检测是否按下了向上按钮【发布时间】:2015-10-3006:46:37【问题描述】:在我的活动中,操作栏仅显示左箭头和活动标题。当我按下左箭头时,活动... 查看详情

在命令提示符界面如何返回到上一个文件夹?

在DOS界面当我打开A文件夹中的B文件夹后,如何返回到上一层去打开A文件夹中的C文件夹?谢谢!参考技术A返回到上一级文件夹用:CD返回到根文件夹用:CD\本回答被提问者采纳 参考技术Bcd.. 参考技术Ccd这个命令可以,具体使... 查看详情

如何避免返回到带有 HTML id 属性标记的上一个部分,而是转到上一个网站?

】如何避免返回到带有HTMLid属性标记的上一个部分,而是转到上一个网站?【英文标题】:HowtoavoidgoingbacktoaprevioussectiontaggedwithanHTMLidattributeandgotoapreviouswebsiteinstead?【发布时间】:2019-09-1813:26:30【问题描述】:我有一个包含多个... 查看详情

如何使用活动显示的片段转到上一个活动

】如何使用活动显示的片段转到上一个活动【英文标题】:HowcanIgotopreviousactivitywiththefragmenttheactivitywasshowing【发布时间】:2014-10-2023:28:37【问题描述】:我有两个活动,活动A和活动B。现在活动A有3个Fragments,其中一个启动活动B... 查看详情

如何通过按下按钮从 tkinter 输入字段返回变量以在另一个函数中使用?

】如何通过按下按钮从tkinter输入字段返回变量以在另一个函数中使用?【英文标题】:HowdoIreturnavariablefromatkinterEntryfieldtouseinanotherfunctionbypressingabutton?【发布时间】:2022-01-1119:25:36【问题描述】:这是我的程序的简化版本,我在... 查看详情

iOS Dev - 如何检测用户通过按“返回”访问此 UIViewController

】iOSDev-如何检测用户通过按“返回”访问此UIViewController【英文标题】:iOSDev-HowtodetectthatusergetstothisUIViewControllerbypressing"Back"【发布时间】:2014-03-0919:59:05【问题描述】:我有一个带有3个标签的iOS应用:首页Tab1Tab2在“主... 查看详情

如何通过按下按钮返回或按钮主页停止播放声音

】如何通过按下按钮返回或按钮主页停止播放声音【英文标题】:Howtostopplaysoundbypressbuttonbackorbuttonhome【发布时间】:2018-01-3004:25:24【问题描述】:如何通过按返回键或主页键停止播放声音请帮助我:publicclassMainActivityextendsAppComp... 查看详情

返回按钮到上一个局部视图

】返回按钮到上一个局部视图【英文标题】:Backbuttontopreviouspartialview【发布时间】:2015-01-1515:47:58【问题描述】:在我的.NetMVC4项目中,视图包含部分视图,在每个对应的Ajax.Beginform和选项InsertionMode=InsertionMode.Replace,之后替换为... 查看详情

如何通过操作栏中的后退按钮转到上一个片段? (科特林)

】如何通过操作栏中的后退按钮转到上一个片段?(科特林)【英文标题】:Howtogotothepreviousfragmentbybackbuttoninactionbar?(Kotlin)【发布时间】:2020-10-1817:16:57【问题描述】:我有两个片段,我想使用操作栏中的后退按钮在它们之间创... 查看详情

UINavigationItem 后退按钮返回到上一个导航项,但视图没有改变

】UINavigationItem后退按钮返回到上一个导航项,但视图没有改变【英文标题】:UINavigationItembackbuttonreturnstopreviousnavigationitem,butviewdoesn\'tchange【发布时间】:2009-10-0323:23:47【问题描述】:我有一个添加导航栏并显示新视图的“didSele... 查看详情

如何更改到上一个目录(代码片段)

我真的想知道如何使用2点(/..)将目录更改为下一个文件。我可以回到以前的目录,但如何做到这样的事情去没有文件名的下一个目录请!我知道可以使用文件夹的名称,但我的答案有所不同,请告诉我。答案你用的是什么?在lin... 查看详情

导航通过类名返回指定页面(代码片段)

...回到指定的页面,但是系统的方法是需要传入一个对象,如何通过类名来返回指定页面呢?-(nullableNSArray<__kindofUIViewController*>*)popToViewController:(UIViewController*)viewControlleranimated:(BOOL)animated;//Popsview 查看详情

打开一个文件夹如何快速回到前一个页面

比如打开了C盘,显示了很多文件夹,打开其中一个,如何快速回到前一步骤(就是只打开C盘的时候)要使用快捷键而不是后退可以用backspace退回上一个界面,也可以用Alt+←返回,用Alt+→可以返回撤销前的一步。1、电脑打开C盘... 查看详情

按下返回键时如何通过多个文本字段输入进行选项卡?

】按下返回键时如何通过多个文本字段输入进行选项卡?【英文标题】:HowtotabthroughmultipletextFieldinputswhenreturnkeyispressed?【发布时间】:2019-06-2517:24:55【问题描述】:我在FormController中有一个包含多个输入的表单。每当用户按下返... 查看详情

第7章按值传递或按引用传递:7.5处理返回值(代码片段)

....,byoperator[]orfront())  返回容器或字符串中的元素(如,通过[]运算符或front()函数)  •Grantingwriteaccesstoclassmembers  允许修改类对象的成员  •Returningobjectsforchainedcalls(operator<<andoperator&g 查看详情