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)