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
如何打开关闭应用程序后打开的最后一个片段并使用导航抽屉和导航组件重新打开它