Android 回收器视图中不显示房间数据库中的数据。可能有什么问题?
我想通过RoomDatabase在回收器视图中显示我的物品。但当我启动应用程序时,它会显示只有标题的空屏幕 它是回收器视图的适配器Android 回收器视图中不显示房间数据库中的数据。可能有什么问题?,android,mvvm,kotlin,android-recyclerview,android-room,Android,Mvvm,Kotlin,Android Recyclerview,Android Room,我想通过RoomDatabase在回收器视图中显示我的物品。但当我启动应用程序时,它会显示只有标题的空屏幕 它是回收器视图的适配器 class AlarmAdapter : ListAdapter<Alarm, AlarmAdapter.AlarmHolder>(DIFF_CALLBACK) { private lateinit var alarmViewModel: AlarmViewModel companion object { private
class AlarmAdapter : ListAdapter<Alarm, AlarmAdapter.AlarmHolder>(DIFF_CALLBACK) {
private lateinit var alarmViewModel: AlarmViewModel
companion object {
private val DIFF_CALLBACK = object : DiffUtil.ItemCallback<Alarm>() {
override fun areItemsTheSame(oldItem: Alarm, newItem: Alarm): Boolean {
return oldItem.id == newItem.id
}
override fun areContentsTheSame(oldItem: Alarm, newItem: Alarm): Boolean {
return oldItem.days == newItem.days && oldItem.timeInMinutes == newItem.timeInMinutes
&& oldItem.departTimeInMinutes == newItem.departTimeInMinutes && oldItem.fromAddress == newItem.fromAddress
&& oldItem.toAddress == newItem.toAddress && oldItem.isEnabled == newItem.isEnabled
}
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): AlarmHolder {
val itemView = LayoutInflater.from(parent.context)
.inflate(R.layout.alarm_item, parent, false)
alarmViewModel = ViewModelProviders.of(parent.context as FragmentActivity).get(AlarmViewModel::class.java)
return AlarmHolder(itemView)
}
override fun onBindViewHolder(holder: AlarmHolder, position: Int) {
val currentAlarm = getItem(position)
holder.fromAddress.text = currentAlarm.fromAddress
// and other texts
holder.alarmSwitch.isEnabled = currentAlarm.isEnabled
holder.alarmSwitch.setOnClickListener {
holder.alarmSwitch.toggle()
currentAlarm.isEnabled = !currentAlarm.isEnabled
alarmViewModel.update(currentAlarm)
}
}
inner class AlarmHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
internal var fromAddress = itemView.findViewById<TextView>(R.id.alarm_item_from_address)
// and other resources
}
}
它是一个存储库
class AlarmRepository(application: Application) {
private var alarmDao: AlarmDao
private var allAlarms: LiveData<List<Alarm>>
private val uiScope = CoroutineScope(Dispatchers.IO)
init {
val database: AlarmDatabase = AlarmDatabase.getInstance(application.applicationContext)!!
alarmDao = database.alarmDao()
allAlarms = alarmDao.getAllAlarms()
}
fun getAllAlarms() = allAlarms
fun insert(alarm: Alarm) {
uiScope.launch { alarmDao.insert(alarm) }
}
fun delete(alarm: Alarm) {
uiScope.launch { alarmDao.delete(alarm) }
}
fun deleteAllNotes() {
uiScope.launch { alarmDao.deleteAllAlarms() }
}
fun update(alarm: Alarm) {
uiScope.launch { alarmDao.update(alarm) }
}
fun getAlarmById(id: Int) = alarmDao.getAlarmById(id)
}
还有刀类
@Dao
interface AlarmDao {
@Insert
fun insert(alarm: Alarm)
@Delete
fun delete(alarm: Alarm)
@Update
fun update(alarm: Alarm)
@Query("DELETE FROM alarm_table")
fun deleteAllAlarms()
@Query("SELECT * FROM alarm_table ORDER BY days ASC")
fun getAllAlarms() : LiveData<List<Alarm>>
@Query("SELECT * FROM alarm_table WHERE id = :id")
fun getAlarmById(id: Int) : Alarm
}
我能做些什么来解决这个问题?
如果你需要更多的代码,请告诉我 在AlarmViewModel类中,将对repo的调用放在getAllAlarms方法中
fun getAllAlarms() {
repository.getAllAlarms()
}
将其从init方法中删除
allAlarms = alarmDao.getAllAlarms()
放
fun getAllAlarms() = alarmDao.getAllAlarms()
你能把你的AlarmViewModel类、存储库和dao类放在一起吗?@joao86的课程问题:-你在哪里做adapter.notifyDataSetChanged?-在观察者内部,it变量是否有报警列表?@joao86 adapter.submitlisit包含关于更改的通知。在《观察家》里面,是艾姆提,它没有帮助我
allAlarms = alarmDao.getAllAlarms()
fun getAllAlarms() = alarmDao.getAllAlarms()