nav_graph中两个片段之间的共享视图模型

哈姆扎·沙鲁夫(Hamza Sharuf)

我有一个应用程序,其中有一个活动,其中有29个片段,其中nav_graph两个片段用于身份验证,我需要使用ashared view model而不是其他片段共享这两个片段之间的数据

因此,我创建了myViewModel并将其使用viewModels()的一部分实例化在两个片段fragment-ktx

private val viewModel: AuthViewModel by viewModels()

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

AuthViewModel.kt

class AuthViewModel @ViewModelInject constructor(
    private val authRepository: AuthRepository
) : BaseViewModel()

我在这里还缺少其他任何步骤吗?

编辑

我正在从onViewCreated方法访问数据

拉尼什·苏里万石(Rajnish Suryavanshi)

当您通过创建视图模型时,将viewmodels()获得对范围为当前Fragment的ViewModel的引用。

因此,在您的情况下,您将同时private val viewModel: AuthViewModel by viewModels()在两个片段中使用,这将为您提供绑定到每个片段的两个不同的viewmodel实例。

共享视图模型的概念需要一个像Activity的共享范围NavGraph

  1. 使用活动

只是改变

private val viewModel: AuthViewModel by viewModels()

private val viewModel: AuthViewModel by activityViewModels()
  1. 使用导航图

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

<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>

现在,如果要使用相同的视图模型,AuthViewModel则可以使用以下方法创建视图模型:

private val viewModel: AuthViewModel by navGraphViewModels(R.id.authenticationNavGraph)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章