首页 > 解决方案 > 在 RecyclerView 焦点上滑动操作菜单并向后滑动问题

问题描述

我正在尝试在 RecyclerView 中实现一个简单的滑动操作菜单,并且我尝试使用一种简单的方法,使用 ItemTouchHelper 和包含行本身和附加在行下方的按钮的布局(对于每一行)。我应该在滑动时显示它们。

虽然布局按预期工作,但我仍然有许多重要问题。这是一个屏幕截图:

当前布局

问题如下:

这是我目前正在使用的简单 ItemTouchHelper 回调:

class FileSwipeCallback :
    ItemTouchHelper.SimpleCallback(1, 1) {

    override fun getMovementFlags(
        recyclerView: RecyclerView,
        viewHolder: RecyclerView.ViewHolder
    ): Int {
        return if (viewHolder is FileAdapter.FileViewHolder) {
            val swipeFlags = ItemTouchHelper.START or ItemTouchHelper.END
            makeMovementFlags(0, swipeFlags)
        } else 0
    }

    override fun onMove(
        recyclerView: RecyclerView,
        viewHolder: RecyclerView.ViewHolder,
        target: RecyclerView.ViewHolder
    ): Boolean {
        return true
    }

    override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) { }

    override fun onChildDraw(
        c: Canvas,
        recyclerView: RecyclerView,
        viewHolder: RecyclerView.ViewHolder,
        dX: Float,
        dY: Float,
        actionState: Int,
        isCurrentlyActive: Boolean
    ) {
        if (actionState == ItemTouchHelper.ACTION_STATE_SWIPE) {
            // Swipe left
            if (dX < 0) {
                (viewHolder as FileAdapter.FileViewHolder).itemView.findViewById<ConstraintLayout>(
                    R.id.fileItemActions
                ).visibility = View.VISIBLE
                val transitionX = 0.295f * dX
                getDefaultUIUtil().onDraw(
                    c,
                    recyclerView,
                    (viewHolder.itemView.findViewById(
                        R.id.fileInfoRow
                    )),
                    transitionX,
                    dY,
                    actionState,
                    isCurrentlyActive
                )
            }
        }
    }
}

我真的很感激一个解决方案。我已经在 Stack Overflow 上进行了搜索,但只找到了不清楚或部分解决方案。

编辑:用新的和更经典的两层方法更新了问题。可见的结果是相同的,但问题发生了变化。

标签: androidandroid-recyclerviewandroid-constraintlayoutswipe-gesture

解决方案


推荐阅读