Android 菜单导航(抽屉)事件中未清除导航图范围的ViewModel

Android 菜单导航(抽屉)事件中未清除导航图范围的ViewModel,android,navigation-drawer,android-architecture-navigation,Android,Navigation Drawer,Android Architecture Navigation,我正在使用导航组件和集成抽屉布局作为侧导航菜单 我有以下导航xml配置结构: <navigation android:id="@+id/mobile_navigation" app:startDestination="@id/nav_apple"> <navigation android:id="@+id/nav_apple"> <fragment

我正在使用导航组件和集成抽屉布局作为侧导航菜单

我有以下导航xml配置结构:

<navigation 
    android:id="@+id/mobile_navigation"
    app:startDestination="@id/nav_apple">

   <navigation android:id="@+id/nav_apple">
      <fragment
          android:id="@+id/nav_apple_fragment"
          android:name="com.my.AppleFragment"
          tools:layout="...">

      ... other fragments and actions which share ViewModel ...

   </navigation>

   <navigation android:id="@+id/nav_orange">
      <fragment
          android:id="@+id/nav_orange_fragment"
          android:name="com.my.OrangeFragment"
          tools:layout="...">
   </navigation>

</navigation>
在“导航苹果”图的
AppleFragment
和其他片段中,我使用以下代码使用导航图范围的ViewModel:

private val model: MyViewModel by navGraphViewModels(R.id.nav_apple)
它允许我共享数据并且工作得很好,但是当我使用侧菜单(抽屉)并导航到另一个目的地时,back-ViewModel数据仍然存在,这是不可取的

根据文档
任何以这种方式创建的ViewModel对象都会一直存在,直到关联的NavHost及其ViewModelStore被清除,或者直到导航图从后堆栈中弹出。
我认为这个导航抽屉事件就是这样,但看起来好像我遗漏了什么。

根据,开始目标(而且,如果该
startDestination
指向一个
图形,则图形的
startDestination
)始终位于后堆栈上

当导航图本身保留在后堆栈上时,附加到该导航图的状态和视图模型也保留


随着下一步工作的进行,每个底部导航项目都将有自己的后堆栈,项目之间的交换将自动保存当前堆栈,并在您重新选择时将其还原。因此,您应该期望底部导航项目在发布后自动保留其ViewModels。

您是如何连接的我们的侧菜单?请包括您的活动代码。@ianhanniballake是的,请检查我更新的问题是
nav_apple
您的
mobile_导航图的
startDestination
?@ianhanniballake,是的,我已经更新了问题。很抱歉confusion@ianhanniballake我刚刚尝试替换
startDestination
nav_-apple
nav_-orange
mobile_-navigation
,它修复了行为-
nav_-apple
模型被清除,因此在这种情况下,我似乎缺少了
startDestination
的一些特殊含义。不幸的是,业务逻辑不允许替换起始目的地,我需要另一个w怎么修呢
val navController = findNavController(R.id.nav_host_fragment)
appBarConfiguration = AppBarConfiguration(
    topLevelDestinationIds = setOf(
        R.id.nav_apple,
        R.id.nav_orange
    ),
    drawerLayout = binding.drawerLayout
)
setupActionBarWithNavController(navController, appBarConfiguration)
binding.navView.setupWithNavController(navController)
private val model: MyViewModel by navGraphViewModels(R.id.nav_apple)