Как передать данные или добавить наблюдателя при событии onBackPressed во FragmentActivity - PullRequest
1 голос
/ 06 октября 2019

Я занимаюсь разработкой приложения для 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?

Спасибо.

Ответы [ 2 ]

2 голосов
/ 30 октября 2019

Пожалуйста, убедитесь, что ваш экземпляр фрагмента такой же. Если это не то же самое, вам нужно создать модель представления по видам деятельности. Надеюсь, это поможет.

1 голос
/ 06 октября 2019

Я что-то упустил. Является ли viewModel и firstViewModel одним и тем же объектом? Также, если это так, вы уверены, что создаете ViewModel из Activity, а не Fragment?

 mViewModel = ViewModelProviders.of(requireActivity()).get(YourViewModel.class);
...