这是我在Android上的第一个项目。
我有NotesRecylerAdapter
个RecyclerView
。在每个元素的视图上,我都有“删除”按钮。单击此按钮时,我必须从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
方法?
答案 0 :(得分:0)
在数据库中为NoteDao定义一个抽象字段,如下所示:
abstract val noteDao: NoteDao
然后呼叫删除,如下所示:
db.noteDao.delete(note)
由于这是您的第一个项目,因此建议您阅读Guide to app architecture。这是用于构建功能强大的生产质量应用程序的推荐体系结构。