【发布时间】:2019-08-19 16:01:19
【问题描述】:
我是 Kotlin 的新手,正在尝试创建一个闹钟应用。在这个应用程序中,我使用的是 LiveData 和 RecycleView。现在我需要更改警报状态:
这是我的 AlarmsRecyclerAdapter,我尝试在其中创建 .onClickListener{}
override fun onBindViewHolder(holder: AlarmsRecyclerAdapter.AlarmItemHolder, position: Int) {
//mAlarmViewModel = ViewModelProviders.of( context as Fragment)[AlarmViewModel::class.java]
if (mAlarms != null) {
val current = mAlarms!!.get(position)
holder.view.edit_time_button.text = current.printTime()
holder.view.switch_alarm_enabled.isEnabled = current.enabled
holder.view.switch_alarm_enabled.setOnClickListener {
current.enabled = !current.enabled
// mAlarmViewModel.insert(current)
}
} else {
// Covers the case of data not being ready yet.
holder.view.edit_time_button.text = "no timer"
}
}
我还尝试在注释行中获取 ViewModel 的实例,但它只会引发类似
java.lang.ClassCastException: android.app.Application 无法转换为 androidx.fragment.app.FragmentActivity 在 com.xxx.alarm.AlarmsRecyclerAdapter.onBindViewHolder(AlarmsRecyclerAdapter.kt:58) 在 com.xxx.alarm.AlarmsRecyclerAdapter.onBindViewHolder(AlarmsRecyclerAdapter.kt:33)
我需要更改数据库中的警报,那么如何在适配器类中获取ViewModel 的实例?还是有更好的方法来管理数据变化?
【问题讨论】:
标签: android mvvm kotlin android-recyclerview