为什么Android导航组件无法返回上一个片段?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么Android导航组件无法返回上一个片段?相关的知识,希望对你有一定的参考价值。

我有两个片段调用CreateRoomFragmentDisplayPhotoFragment,导航图如下所示:

<navigation>    
<fragment
    android:id="@+id/createRoomFragment"
    android:name="upuphere.com.upuphere.ui.room.CreateRoomFragment"
    android:label="Create a room"
    tools:layout="@layout/fragment_create_room">
    <action
        android:id="@+id/action_createRoomFragment_to_roomFragment"
        app:destination="@id/roomFragment" />
    <action
        android:id="@+id/action_createRoomFragment_to_displayPhotoFragment"
        app:destination="@id/displayPhotoFragment" />
</fragment>

<fragment
    android:id="@+id/displayPhotoFragment"
    android:name="upuphere.com.upuphere.fragment.DisplayPhotoFragment"
    android:label="fragment_display_photo"
    tools:layout="@layout/fragment_display_photo" >
    <argument android:name="bitmap"
              app:argType="android.graphics.Bitmap"/>
</fragment>

因此,当我想从CreateRoomFragment移至DisplayPhotoFragment时,请按如下所示使用do:

NavDirections action = CreateRoomFragmentDirections.actionCreateRoomFragmentToDisplayPhotoFragment(selectedPhoto);
Navigation.findNavController(view).navigate(action);

这样做,我可以导航到DisplayPhotoFragment

但是现在的问题是:

当我按下设备的back按钮以及工具栏上的Back arrow时,无法转到CreateRoomFragment

我在这里想念的是什么?原因是,如果我从RecyclerView的项目中移出另一个片段,则没有问题,但是从senario上方,它无法移回先前的片段。请帮助。

编辑:

我尝试过,但是仍然无法返回到先前的片段:

requireActivity().getOnBackPressedDispatcher().addCallback(getViewLifecycleOwner(),
                new OnBackPressedCallback(true) 
                    @Override
                    public void handleOnBackPressed() 

                        navController.navigateUp();
                    
                );
答案
Android会维护一个包含您访问过的目的地的后台堆栈。当用户打开应用程序时,您的应用程序的第一个目标位于堆栈上。每次对navigate()方法的调用都会在堆栈顶部放置另一个目标。向上敲击或向后敲击分别调用NavController.navigateUp()NavController.popBackStack()方法,以从堆栈中移出(或弹出)顶部目标。

以上是关于为什么Android导航组件无法返回上一个片段?的主要内容,如果未能解决你的问题,请参考以下文章

从活动向上导航到片段打开相同的片段 - Android 导航组件

android jetpack 导航仪器测试在返回导航上失败

Android导航组件:如何保存片段状态

当返回到“导航架构组件”中的同一选项卡时,嵌套片段的状态会丢失

Android导航组件不显示片段

使用Android导航组件时如何从后台获取片段?