我正在开发android应用,当用户按下后退按钮(这意味着onBackPress事件被触发)时,我面临传递数据的问题。
我想用viewmodel触发观察者事件,但是它不起作用。
像这样。
// First Fragment
private val viewModel: MyViewModel by bindViewModel()
viewModel.currencyVal.observe { state ->
Timber.i("Event fired")
}
...
// Second fragment which was displayed with fragment transaction. This code is when user pressed back button. like override fun onBackPressed
private val viewModel: MyViewModel by bindViewModel()
viewModel.currencyVal(5)
// MyViewModel
...
val currencyVal = MutableLiveData<Int>()
...
fun setCurrencyVal(currencyVal: Int) {
currencyVal.value = currencyVal
}
这是bindViewModel函数
protected inline fun <reified T : ViewModel> bindViewModel(
crossinline initializer: T.() -> Unit = {}
): Lazy<T> = nonConcurrentLazy {
ViewModelProviders.of(requireActivity())
.get(T::class.java)
.also { it.initializer() }
}
通过片段事务传递数据也不起作用。
当用户在FragmentActivity中按下“后退”按钮时,有人可以建议如何传递数据吗?
谢谢。
最佳答案
我想念一些东西。 viewModel和firstViewModel是同一对象吗?如果是这样,还确定要创建Activity的ViewModel,而不是Fragment吗?
mViewModel = ViewModelProviders.of(requireActivity()).get(YourViewModel.class);