android - 在回收站视图中删除一个项目会复制另一个项目
问题描述
我使用Room
as adatabase
并列出 a 中的数据RecyclerView
。当我尝试删除其中一个项目时,它下面的项目会被复制。
但是当我重新启动应用程序时,重复的项目也会被删除(以及我之前删除的项目)。我尝试过使用notifyItemRemoved(position)
,但仍然没有用。
class HomeFragment : Fragment() {
private inner class NoteViewHolder(view: View):RecyclerView.ViewHolder(view) {
val rowName:TextView = view.findViewById(R.id.rec_name)
val rowType:TextView = view.findViewById(R.id.rec_type)
val rowSub:TextView = view.findViewById(R.id.rec_sub)
val daysAgo:TextView = view.findViewById(R.id.how_many_days_ago)
}
private inner class NotesAdapter(val users:List<User>):RecyclerView.Adapter<NoteViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): NoteViewHolder {
val view = layoutInflater.inflate(R.layout.row_recycle, parent, false)
return NoteViewHolder(view)
}
override fun getItemCount(): Int =users.size
override fun onBindViewHolder(holder: NoteViewHolder, position: Int) {
val user = users[position]
holder.apply{
rowName.setText(user.name)
rowSub.setText(user.subject)
rowType.setText(user.type)
}
//To delete
holder.itemView.setOnLongClickListener {
val builder = AlertDialog.Builder(requireContext(),R.style.Theme_AppCompat_Light_Dialog_Alert)
builder.setTitle("Notes Returned?")
builder.setNegativeButton("Yes",object :DialogInterface.OnClickListener {
override fun onClick(dialog: DialogInterface?, which: Int) {
(activity as MainActivity).db.myDao().deleteData(users[position])
notifyItemRemoved(position)
}
})
val alert = builder.create()
alert.show()
true
}
}
}
MyDao
@Dao
interface MyDao {
@Delete
fun deleteData(user: User)
}
User.kt
@Entity
data class User(
val subject:String,
val type:String,
val name: String?,
val date: String?
)
Mainactivity.kt
lateinit var db: Database
db = Room.databaseBuilder(this,Database::class.java,"User").allowMainThreadQueries().build()
我该如何解决这个问题?
解决方案
首先从列表中删除,然后调用notifyItemRemoved
. 检查下面。
override fun onClick(dialog: DialogInterface?, which: Int) {
(activity as MainActivity).db.myDao().deleteData(users[position])
users.removeAt(position) // Delete from list
notifyItemRemoved(position)
}
注意:您的列表应该MutableList
代替List
执行操作。
推荐阅读
- lua - 我的简单 Lua 脚本是否挂在第一个任务上?
- c++ - 在命令行运行 C++ 包的函数时出错
- php - 从 sql 数据库中选择数据不起作用。我如何解决它?
- python - SQL INSERT INTO - 重复仍然存在(如何修改插入?)
- javascript - 关于这段代码执行顺序的问题
- javascript - 如何修复声明或声明预期错误
- reactjs - 如何在 React 中触发多个组件更高的功能?
- python - 如何在图片之间添加等待
- typescript - 如何在打字稿中安全地查询派生对象的属性?
- xml - Kentico 动态页面类型字段和更新 ClassSearchSettings