NavHostFragment:使用导航抽屉重新打开更改的片段

问题描述

如何重新打开我之前使用 NavHostFragment 导航到的片段?

导航抽屉:

Home => Animals-Fragment

片段:

Animals-Fragment => Bunnies-Fragment => Temporarily change Bunny color to blue from red

导航抽屉:

Bunnies-Fragment => Home

现在我想要的是,当我点击 Animals 时,它会显示修改的 Bunnies-Fragment。这意味着,我想要该 Fragment 的已加载实例。我该怎么做?

我使用以下代码在片段之间交换:

    NavHostFragment.findNavController(p)
            .navigate(R.id.action_navigation_animals_to_bunniesFragment,bundle);

我的 HomeActivity 在它的 onCreate() 中有这个:

   AppBarConfiguration appBarConfiguration = new AppBarConfiguration.Builder(
                R.id.navigation_home,R.id.navigation_dashboard,R.id.navigation_animals)
                .build();
        NavController navController = Navigation.findNavController(this,R.id.nav_host_fragment);
        NavigationUI.setupActionBarWithNavController(this,navController,appBarConfiguration);
        NavigationUI.setupWithNavController(navView,navController);

解决方法

使用弹出窗口代替目的地

    <action
        android:id="@+id/action_ThirdFragment_to_FirstFragment"
        app:popUpTo="@id/FirstFragment" />

要了解弹出窗口,我建议您观看此视频

https://www.youtube.com/watch?v=mLfWvSGG5c8

它以非常棒的方式解释了 PopUpTo 和 PopUpToInclusive