Android 导航图中两个片段之间的共享视图模型

Android 导航图中两个片段之间的共享视图模型,android,android-studio,android-viewmodel,android-architecture-navigation,android-navigation,Android,Android Studio,Android Viewmodel,Android Architecture Navigation,Android Navigation,我有一个带有一个活动的应用程序,在导航图中大约有29个片段,其中两个片段用于身份验证,我需要使用共享视图模型在这两个片段之间共享数据,但不能与其他片段共享数据 因此,我创建了我的ViewModel,并使用viewModels()在两个片段中实例化它,这是fragment ktx库的一部分 private val viewModel:AuthViewModel by viewModels() 但是,一旦我使用findNavController().navigate()导航到第二个片段,我就会丢失

我有一个带有一个活动的应用程序,在
导航图中大约有29个片段,其中两个片段用于身份验证,我需要使用
共享视图模型在这两个片段之间共享数据,但不能与其他片段共享数据

因此,我创建了我的
ViewModel
,并使用
viewModels()
在两个片段中实例化它,这是
fragment ktx
库的一部分

private val viewModel:AuthViewModel by viewModels()
但是,一旦我使用
findNavController().navigate()
导航到第二个片段,我就会丢失
AuthViewModel

AuthViewModel.kt

类AuthViewModel@ViewModelInject构造函数(
私有val authRepository:authRepository
):BaseViewModel()
这里还有我遗漏的步骤吗

编辑


当您通过
viewmodels()
yout创建viewmodel时,我正在通过
onViewCreated
方法访问数据,以获取对当前片段范围内的viewmodel的引用

因此,在本例中,您将在两个片段中使用
private val viewModel:AuthViewModel by viewModels()
,这将为您提供与每个片段关联的两个不同的viewModel实例

共享视图模型的概念需要像
活动
导航图
这样的共享范围

  • 使用活动
  • 换衣服

    private val viewModel: AuthViewModel by viewModels()
    

  • 使用导航图
  • 创建另一个导航图,其中有两个用于身份验证的片段

    <navigation android:id="@+id/authenticationNavGraph" 
            app:startDestination="@id/chooseRecipient">
            <fragment
                android:id="@+id/authentication1Fragment"
                android:name="com.example.AuthFragment1"
                android:label="Fragment 1">
            </fragment>
            <fragment
                android:id="@+id/authentication2Fragment"
                android:name="com.example.AuthFragment2"
                android:label="Fragment 2" />
    </navigation>
    
    <navigation android:id="@+id/authenticationNavGraph" 
            app:startDestination="@id/chooseRecipient">
            <fragment
                android:id="@+id/authentication1Fragment"
                android:name="com.example.AuthFragment1"
                android:label="Fragment 1">
            </fragment>
            <fragment
                android:id="@+id/authentication2Fragment"
                android:name="com.example.AuthFragment2"
                android:label="Fragment 2" />
    </navigation>
    
    private val viewModel: AuthViewModel by navGraphViewModels(R.id.authenticationNavGraph)