#android #kotlin #viewmodel #observer-pattern
#Android #kotlin #viewmodel #наблюдатель-шаблон
Вопрос:
Когда я нажимаю на представление, оно изменяет X, который наблюдается во фрагменте. Мне нужно передать выбранный вид в метод viewmodel.X.observe() . Я не могу установить viewmodel.X.observe внутри OnItemClickListener, поскольку он будет пытаться создавать нового наблюдателя при каждом нажатии на элемент. Каков наилучший способ передать выбранный элемент в метод viewmodel.observe? Создается ли глобальная переменная для хранения только выбранного элемента?
Фрагмент кода:
lateinit var viewClicked: View
val itemClickListener =
(object : OnItemClickListener<View> {
override fun onItemClicked(item: View) {
viewClicked = item
//do something else
}
})
viewModel.signalStatus.observe(viewLifecycleOwner, {
//Is viewClicked global my only option to be able to access here?
// I can't have this observer inside my click listener as it will trigger this multiple times when user clicks on view
if (viewClicked == btnView) {
//do something
}
})
Комментарии:
1. ViewModel не должен содержать представление. Перед использованием ViewModels лучше узнать больше об архитектуре MVVM . или посмотрите несколько серий на YouTube.
2. @MRazaImtiaz приведенный выше код находится во фрагменте, а не в viewmodel.
3. Вы не можете этого сделать, чего вы хотите достичь, передавая представление? Обычный способ — наблюдать X и с помощью прослушивателя щелчков изменять значение X, после
observe block
чего будет выполнен код внутри4. возможно, вы можете попробовать функцию обратного вызова интерфейса
Ответ №1:
Да, глобальная переменная. Или сгруппируйте их в массив, вместо этого передайте индекс.