【问题标题】:RecyclerView(Kotlin): Adding an swipe to delete functionality on a ToDo app with data in SQL databaseRecyclerView(Kotlin):使用 SQL 数据库中的数据在 ToDo 应用程序上添加滑动以删除功能
【发布时间】:2021-01-30 05:39:04
【问题描述】:

我是 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 对象中调用删除函数时,我无法使其工作:

val item = object : SwipeToDelete(this,0,ItemTouchHelper.LEFT){
            override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {
           }
        }

我还想添加编辑功能,但如果我可以使用此删除功能,我可以添加它。

【问题讨论】:

标签: android-studio kotlin android-recyclerview itemtouchhelper


【解决方案1】:

由于 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,0,ItemTouchHelper.LEFT){
    override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {
        deleteToDo(todoId)
    }
}
ItemTouchHelper(item).attachToRecyclerView(recycler)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-27
    • 2020-06-20
    • 1970-01-01
    • 2023-03-10
    • 2023-02-09
    • 1970-01-01
    • 2021-07-26
    • 2015-09-16
    相关资源
    最近更新 更多