taontech / githublog

一个基于github issues的博客系统,实时呈现,零依赖,零代码部署,不用打包不用上线。
4 stars 1 forks source link

Kotlin 使用RecyclerViewSwipeDecorator用法 #65

Open taontech opened 1 year ago

taontech commented 1 year ago

不同的sdk版本需要override的方法参数有变化,31版本集成方法如下:

val callback: ItemTouchHelper.SimpleCallback = object :
            ItemTouchHelper.SimpleCallback(0, (ItemTouchHelper.LEFT) ) {
            override fun onMove(
                recyclerView: RecyclerView,
                viewHolder: RecyclerView.ViewHolder,
                target: RecyclerView.ViewHolder
            ): Boolean {
                return false
            }

            override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {
                // Take action for the swiped item
                try {
                    val position = viewHolder.adapterPosition
                    val data:ProjectModel = viewModel.projectList[viewHolder.adapterPosition]

                    AlertDialog.Builder(requireContext()).apply {
                        setTitle("警告")
                        setMessage("删除后无法恢复,确定要删除此项目吗?")
                        setCancelable(true)
                        setPositiveButton("删除"){
                            dialog, which ->
                            viewModel deleteProject data.projectId!!
                        }
                        setNegativeButton("取消"){
                            dialog, which->
                            adapter.notifyItemChanged(viewHolder.adapterPosition)
                        }
                        show()
                    }

                } catch (e: Exception) {
                    Log.e("MainActivity", e.message.toString())
                }
            }

            // You must use @RecyclerViewSwipeDecorator inside the onChildDraw method
            override fun onChildDraw(c: Canvas, recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder,
                                     dX: Float,
                                     dY: Float,
                                     actionState: Int,
                                     isCurrentlyActive: Boolean
            ) {
                RecyclerViewSwipeDecorator.Builder(
                    c,
                    recyclerView,
                    viewHolder,
                    dX,
                    dY,
                    actionState,
                    isCurrentlyActive
                )
                    .addSwipeLeftBackgroundColor(
                        Color.WHITE
                    )
                    .addSwipeLeftActionIcon(R.drawable.ic_close)
                    .addSwipeRightBackgroundColor(
                        Color.GRAY
                    )
                    .addSwipeRightActionIcon(R.drawable.warning)
                    .addSwipeRightLabel("RIGHT")
                    .setSwipeRightLabelColor(Color.BLUE)
                    .addSwipeLeftLabel("删除项目")
                    .setSwipeLeftLabelColor(Color.RED)
//                    .addCornerRadius(TypedValue.COMPLEX_UNIT_DIP, 16)
//                    .addPadding(TypedValue.COMPLEX_UNIT_DIP, 8, 16, 8)
                    .create()
                    .decorate()
                super.onChildDraw(
                    c!!, recyclerView!!,
                    viewHolder!!, dX, dY, actionState, isCurrentlyActive
                )
            }
        }
        val itemTouchHelper = ItemTouchHelper(callback)
        itemTouchHelper.attachToRecyclerView(recyclerView)