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

Posted

技术标签:

【中文标题】NavHostFragment:使用导航抽屉重新打开更改的片段【英文标题】:NavHostFragment: Reopen changed fragment with navigation drawer 【发布时间】:2021-05-02 21:13:07 【问题描述】:

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

导航抽屉:

Home => Animals-Fragment

片段:

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

导航抽屉:

Bunnies-Fragment => Home

现在我想要,当我点击动物时,它会显示被改变的兔子片段。这意味着,我想要该片段的已加载实例。我该怎么做?

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

    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);

【问题讨论】:

片段是否包含一些需要重新打开的数据?如果是,请将它们移至 ViewModel。并且 ViewModel 应该具有活动范围或主图范围(这意味着即使片段被破坏,ViewModel 也应该存活)。然后当你重新打开片段时,只显示从 ViewModel 加载的数据。 您找到解决方案了吗?我也有同样的问题。 遗憾的是没有。我希望有人能找到一个^^ 【参考方案1】:

使用弹出窗口代替目的地

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

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

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

它很好地解释了 PopUpTo 和 PopUpToInclusive

【讨论】:

以上是关于NavHostFragment:使用导航抽屉重新打开更改的片段的主要内容,如果未能解决你的问题,请参考以下文章

如何在更改全屏/上方导航时使用导航组件 navhostfragment

如何打开关闭应用程序后打开的最后一个片段并使用导航抽屉和导航组件重新打开它

导航抽屉切换图标

如何使用导航抽屉打开和关闭更改按钮图像

Navigation导航组件的使用:内容承载容器NavHostFragment加载原理

Android 移除导航抽屉上的阴影