如何解决RecyclerViewKotlin:使用SQL数据库中的数据添加滑动以删除ToDo应用上的功能
我是kotlin和android studio的新手,目前我正尝试用自己的想法构建待办事项列表应用程序。它主要完成了,但是我必须为用户添加的任务添加编辑和删除功能。用户添加的任务使用sqliteDatabase存储在设备上。这是删除我编写的课程的基本滑动方式:
abstract class SwipetoDelete(context: Context,dragDir: Int,swipeDir: Int): itemtouchhelper.SimpleCallback(dragDir,swipeDir) {
override fun onMove(
recyclerView: RecyclerView,viewHolder: RecyclerView.ViewHolder,target: RecyclerView.ViewHolder
): Boolean {
return false
}
override fun onSwiped(viewHolder: RecyclerView.ViewHolder,direction: Int) {
Todo("Not yet implemented")
}
}
fun deletetoDo(todoId: Long){
val db = writableDatabase
db.delete(TABLE_Todo_ITEM,"$COL_Todo_ID=?",arrayOf(todoId.toString()))
db.delete(TABLE_Todo,"$COL_ID=?",arrayOf(todoId.toString()))
}
这是我正在使用的recyclerview适配器:
class ItemAdapter(val context: Context,val dbHandler: DBHandler,val list: MutableList<TodoItem>) :
RecyclerView.Adapter<ItemAdapter.ViewHolder>(){
override fun onCreateViewHolder(p0: ViewGroup,p1: Int): ViewHolder {
return ViewHolder(LayoutInflater.from(context).inflate(R.layout.rv_child_item,p0,false))
}
override fun onBindViewHolder(holder: ViewHolder,p1: Int) {
holder.itemName.text = list[p1].itemName
holder.itemName.isChecked = list[p1].isCompleted
holder.itemName.setonClickListener{
list[p1].isCompleted = !list[p1].isCompleted
dbHandler.updatetoDoItem(list[p1])
}
}
override fun getItemCount(): Int {
return list.size
}
class ViewHolder(v : View) : RecyclerView.ViewHolder(v){
val itemName : CheckBox = v.findViewById(R.id.cb_item)
}
}
但是由于某些原因,当我尝试在此Swipetodelete对象中调用delete函数时,我无法使其工作:
val item = object : SwipetoDelete(this,itemtouchhelper.LEFT){
override fun onSwiped(viewHolder: RecyclerView.ViewHolder,direction: Int) {
}
}
我也想添加编辑功能,但是如果我可以使用此删除功能,则可以添加它。
解决方法
由于 SwipeToDelete 是一个抽象类,您可以覆盖 Fragment/Activity 类上的 onSwiped 函数。
您可以将 SwipeToDelete 类修改为:
abstract class SwipeToDelete(context: Context,dragDir: Int,swipeDir: Int): ItemTouchHelper.SimpleCallback(dragDir,swipeDir) {
override fun onMove(
recyclerView: RecyclerView,viewHolder: RecyclerView.ViewHolder,target: RecyclerView.ViewHolder
): Boolean {
return false
}
}
然后在您的片段/活动中覆盖 onSwiped 函数并将其附加到您的回收站视图:
val item = object : SwipeToDelete(this,ItemTouchHelper.LEFT){
override fun onSwiped(viewHolder: RecyclerView.ViewHolder,direction: Int) {
deleteToDo(todoId)
}
}
ItemTouchHelper(item).attachToRecyclerView(recycler)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。