如何使用 Google 的 GithubBrowserSample 方法在片段之间共享视图模型?
How to share view models between fragments using Google's GithubBrowserSample approach?
我是使用 Android 架构组件的新手,所以我决定使用 GithubBrowserSample 构建我的应用程序来实现我的许多用例。但我有一个问题,我不知道用这种方法在片段之间共享视图模型的正确方法是什么。
我想共享视图模型,因为我有一个带有 viewpager 的片段,其中有 2 个片段需要观察父片段视图模型的数据
我之前是用这个实现的,基于google's documentation
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
model = activity?.run {
ViewModelProviders.of(this)[SharedViewModel::class.java]
} ?: throw Exception("Invalid Activity")
}
但生命周期扩展:2.2.0-alpha03 似乎已被弃用
在 GithubBrowserSample 中,他们有类似这样的东西来创建视图模型的实例,但每次似乎都是不同的实例
@Inject
lateinit var viewModelFactory: ViewModelProvider.Factory
private val userViewModel: UserViewModel by viewModels {
viewModelFactory
}
而且我不知道在哪里传递 activity 范围或者我是否应该传递它。
我试过这样的东西
@Inject
lateinit var viewModelFactory: ViewModelProvider.Factory
private lateinit var myViewModel: MyViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
myViewModel = activity?.run {
ViewModelProvider(this, viewModelFactory).get(MyViewModel::class.java)
} ?: throw Exception("Invalid Activity")
}
但我得到了
kotlin.UninitializedPropertyAccessException: lateinit property viewModelFactory has not been initialized
我希望你能帮助我,我对此有点迷茫,对不起,如果我的英语不是那么好
by viewModels()
提供了一个 ViewModel,它的范围仅限于单个 Fragment。有一个单独的 by activityViewModels()
将 ViewModel 的范围限定为您的 Activity。
但是,ViewModelProviders.of(this)
的直接替换只是 ViewModelProvider(this)
- 使用 lifecycle-extensions:2.2.0-alpha03
时不需要切换到 by viewModels()
或 by activityViewModels()
我是使用 Android 架构组件的新手,所以我决定使用 GithubBrowserSample 构建我的应用程序来实现我的许多用例。但我有一个问题,我不知道用这种方法在片段之间共享视图模型的正确方法是什么。
我想共享视图模型,因为我有一个带有 viewpager 的片段,其中有 2 个片段需要观察父片段视图模型的数据
我之前是用这个实现的,基于google's documentation
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
model = activity?.run {
ViewModelProviders.of(this)[SharedViewModel::class.java]
} ?: throw Exception("Invalid Activity")
}
但生命周期扩展:2.2.0-alpha03 似乎已被弃用
在 GithubBrowserSample 中,他们有类似这样的东西来创建视图模型的实例,但每次似乎都是不同的实例
@Inject
lateinit var viewModelFactory: ViewModelProvider.Factory
private val userViewModel: UserViewModel by viewModels {
viewModelFactory
}
而且我不知道在哪里传递 activity 范围或者我是否应该传递它。
我试过这样的东西
@Inject
lateinit var viewModelFactory: ViewModelProvider.Factory
private lateinit var myViewModel: MyViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
myViewModel = activity?.run {
ViewModelProvider(this, viewModelFactory).get(MyViewModel::class.java)
} ?: throw Exception("Invalid Activity")
}
但我得到了
kotlin.UninitializedPropertyAccessException: lateinit property viewModelFactory has not been initialized
我希望你能帮助我,我对此有点迷茫,对不起,如果我的英语不是那么好
by viewModels()
提供了一个 ViewModel,它的范围仅限于单个 Fragment。有一个单独的 by activityViewModels()
将 ViewModel 的范围限定为您的 Activity。
但是,ViewModelProviders.of(this)
的直接替换只是 ViewModelProvider(this)
- 使用 lifecycle-extensions:2.2.0-alpha03
时不需要切换到 by viewModels()
或 by activityViewModels()