ItemTouchHelper startSwipe ничего не делает - PullRequest
0 голосов
/ 13 февраля 2020

Короче говоря, использование startSwipe(ViewHolder) не смахивает элемент:

По сути, у меня есть RecyclerView с элементами типа CardView, мне уже удалось получить перетаскивание и падение + ручное смахивание работает на предметы. Однако сейчас я пытаюсь добавить автоматический c свайп (вызывая метод startSwipe), когда я нажимаю кнопку внутри элемента.

Итак, это мой пользовательский ItemTouchHelper

class SimpleTouchHelperCallback: ItemTouchHelper.Callback {

    private var postsAdapter: PostsRecyclerViewAdapter? = null

    constructor(adapter: PostsRecyclerViewAdapter?) {
        postsAdapter = adapter
    }

    override fun getMovementFlags(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder): Int
            = makeMovementFlags(ItemTouchHelper.START or ItemTouchHelper.END or ItemTouchHelper.DOWN or ItemTouchHelper.UP,
        ItemTouchHelper.START or ItemTouchHelper.END)

    override fun isLongPressDragEnabled(): Boolean = true

    override fun isItemViewSwipeEnabled(): Boolean = true

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

    override fun onSwiped(
        viewHolder: RecyclerView.ViewHolder,
        direction: Int
    ) {
        postsAdapter?.onItemDismiss(viewHolder.adapterPosition)
    }
}

Методы onItemDismiss и onItemMoved работают как положено. Однако, когда я пытаюсь программно провести с помощью следующего кода, он не работает:

override fun onBindViewHolder(holder: PostHolder, position: Int) {
        holder.setPostClickListener(this)
        holder.delete.setOnTouchListener({ v, event ->
            when (event.action) {
                MotionEvent.ACTION_DOWN -> postsTouchHelper.startSwipe(holder)
            }
            false
        })
        holder.bind(posts[position])
    }

Насколько я знаю, мой CardView является прямым потомком RecyclerView. Кто-нибудь знает, почему это не работает или что я делаю неправильно?

...