RecyclerView 与 MVVM 中的 Android 数据绑定类型不匹配

问题描述 投票:0回答:1

我正在使用 Kotlin 和 MVVM 架构开发 Android 笔记应用程序。在 RecyclerView 中使用数据绑定时,我面临持续的类型不匹配错误,即使代码看起来是正确的。

错误信息

Assignment type mismatch: actual type is 'com.im_oregano007.noteit.Notes.Note', but 'Notes.Note?' was expected.

代码片段:

  1. 注释实体(完整文件)
package com.im_oregano007.noteit.Notes

import androidx.room.Entity
import androidx.room.PrimaryKey
import java.util.Date

@Entity(tableName = "notes")
data class Note(
    @PrimaryKey(autoGenerate = true)
    val id : Int,
    var title : String,
    var value : String,
    val date: Date)
  1. RecyclerView 项目布局:
<layout ...>
    <data>
        <variable
            name="n"
            type="com.im_oregano007.noteit.Notes.Note" /> 
    </data>
    ...
</layout>
  1. 适配器:
class NotesAdapter(...) : RecyclerView.Adapter<...> {
    ...
    override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
        val cNote = noteList[position]
        holder.binding.n = cNote
        ...
    }
}
  1. 视图模型:
class MainViewModel(val notesRepository: NotesRepository) : ViewModel() {
    var notesLiveData : LiveData<List<Note>> = notesRepository.getAllNotes()
}
  1. 主要活动(观察者):
mainViewModel.notesLiveData.observe(this, Observer {
    if (notesAdapter != null){
        notesAdapter!!.updatedNotes(it)
    } else {
        notesAdapter = NotesAdapter(this,it)
        setUpRecyclerV()
    }
})

我尝试过的:

  • 我已确保布局文件中的变量不可为空(注意)。
  • 我删除了绑定适配器中不必要的空检查。
  • 我已经仔细检查了 RecyclerView 上的适配器是否正确设置。
  • 我已验证 noteList 包含非空 Note 对象。

尽管做出了这些努力,类型不匹配错误仍然存在。是什么原因导致此问题以及如何解决? 任何帮助将不胜感激!

android kotlin mvvm android-recyclerview android-databinding
1个回答
0
投票

Note 类在包中

com.im_oregano007.noteit.Notes

但是,在RecyclerView Item Layout中,你已经使用了

type="com.im_oregano007.noteit.Notes.Note"

错误是因为你使用了错误的包名

© www.soinside.com 2019 - 2024. All rights reserved.