如何在 FragmentActivity 的 onBackPressed 事件中传递数据或添加观察者
How to pass data or add observer at onBackPressed event in FragmentActivity
我正在开发 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);
请确保您的片段实例相同。
如果不相同,则需要通过 activity 创建视图模型。
希望这有帮助。
我正在开发 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);
请确保您的片段实例相同。 如果不相同,则需要通过 activity 创建视图模型。 希望这有帮助。