Короче говоря, использование 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
. Кто-нибудь знает, почему это не работает или что я делаю неправильно?