使用Kotlin从房间数据库中删除项目

时间:2020-10-06 23:11:55

标签: android kotlin

这是我在Android上的第一个项目。

我有NotesRecylerAdapterRecyclerView。在每个元素的视图上,我都有“删除”按钮。单击此按钮时,我必须从UI以及数据库(Room数据库)中删除元素。

这是NotesRecyclerAdapter中代码的一部分。因此,在BindViewHolder内,我将单击侦听器附加到删除按钮。它从Recycler View(从UI)中删除了项目,但是,它没有从数据库中删除它。您能建议如何从数据库中添加它吗?对数据库的引用不在Activity类的Adapter类中。那要用什么机制呢?

class NotesRecyclerAdapter(private val items: MutableList<Note>) :
     RecyclerView.Adapter<NotesRecyclerAdapter.NoteViewHolder>() {
 ...
override fun onBindViewHolder(holder: NoteViewHolder, position: Int) {
    holder.itemView.deleteNote.setOnClickListener {
            items.removeAt(position)

            notifyDataSetChanged()
            //notifyItemRemoved(position)


 // Part of MainActivity.kt
class MainActivity : AppCompatActivity() {
    private val db get() = Database.getInstance(this)
    private val notes = mutableListOf<Note>()

    private lateinit var adapter: NotesRecyclerAdapter
    private lateinit var layoutManager: StaggeredGridLayoutManager

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        notes.addAll(db.noteDao().getAll())
    ...



 // interface NoteDao
interface NoteDao {
    @Query("SELECT * FROM note ORDER BY id DESC")
    fun getAll(): List<Note>
   
    @Delete
    fun delete(item: Note)

    ...
}

因此,在MainActivity中,我将数据加载到“注释”中。在适配器中,我侦听删除按钮的单击事件。现在如何调用db.delete方法?

1 个答案:

答案 0 :(得分:0)

在数据库中为NoteDao定义一个抽象字段,如下所示:

abstract val noteDao: NoteDao

然后呼叫删除,如下所示:

db.noteDao.delete(note)

由于这是您的第一个项目,因此建议您阅读Guide to app architecture。这是用于构建功能强大的生产质量应用程序的推荐体系结构。