Не совсем уверен, что ваш ViewModel будет внутри вашего RecyclerView, и не совсем уверен, будет ли это считаться наилучшей практикой.Но вот способ, которым я делаю это, и другие видели, как это делают.Сначала вы создаете свою ViewModel в своем фрагменте.Затем вы наблюдаете ваши AlarmData, и когда они меняются, вы обновляете данные в своем RecyclerAdapter.
Таким образом, в вашем фрагменте вы делаете что-то вроде этого ():
mAlarmViewModel = ViewModelProviders.of( context as Fragment)[AlarmViewModel::class.java]
mAlarmViewMode.getAlarms().observe(...
mAdapter.setData(newData)
и внутри своего адаптера вы добавляетеследующее:
setData(data:List) {
mAlarms= data;
notifyDataSetChanged();
}
это должно держать ваши данные обновленными.
Теперь для изменения ваших данных.Попробуйте установить OnclickListener внутри ViewHolder, так как это увеличит скорость вашего приложения.чтобы получить текущее значение, вы можете сделать это:
val current = mAlarms!!.get(getAdapterPosition())
Наконец вы должны добавить интерфейс к вашему адаптеру, что-то вроде этого:
interface ItemSelectedListener {
fun onItemSelected(item:Any, v:View)
}
Установите этот интерфейс из вашего фрагмента и вызовитеэто из onClickListener.Тогда у вас есть все данные, которые вам нужны, внутри вашего фрагмента, и вы можете изменить их там