【问题标题】:NavHostFragment: Reopen changed fragment with navigation drawerNavHostFragment:使用导航抽屉重新打开更改的片段
【发布时间】: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 加载的数据。
  • 您找到解决方案了吗?我也有同样的问题。
  • 遗憾的是没有。我希望有人能找到一个^^

标签: android android-fragments navigation android-actionbar


【解决方案1】:

使用弹出窗口代替目的地

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

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

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

它很好地解释了 PopUpTo 和 PopUpToInclusive

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多