RecyclerView
的主要用途是更改项目的顺序。而且,更改顺序后,我需要获取有关拖动开始位置和拖放位置(完成位置)的数据。
我已经实现了ItemTouchHelper.Callback()
并用界面覆盖了它,效果很好,但是唯一的问题是如何仅获得商品的第一和最后位置。
我没有找到任何使用ItemTouchHelper
的解决方案,尝试将onSelectedChanged
和clearView
组合使用,但这是行不通的。另外,我正在使用Subjects
中的RxJava2
来推送值,但没有使用任何类型的过滤器运算符找到解决方案。
override fun onMove(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder, target: RecyclerView.ViewHolder): Boolean {
adapter.onItemMoved(viewHolder.adapterPosition, target.adapterPosition)
return true
}
private fun swapItems(positionFrom: Int, positionTo: Int) {
Collections.swap(myList, positionFrom, positionTo)
myList.forEachIndexed { index, myObject -> myListUpdated.add(myObject.copy(index = index)) }
myListSubject.onNext(myListUpdated.toList())
notifyItemMoved(positionFrom, positionTo)
}
此刻,我从onMove
得到了所有交换的头寸(所以从1到2,从2到3,从3到4)。我想实现1到4,而无需中间步骤。