I am using StaggeredGridLayoutManager
in my code.
Take a look at this first:
I am facing these problems:
In 1st attempt, I move the tile '1' directly upwards by one step and then stop. Everything looks good and the tile labled as '1' replaces label '2'.
In 2nd attempt, I drag the tile labeled '3' up but do not stop. Still it automatically gets replaced by '1' which is present just above '3'. Something is trouble here.
In my 3rd and 4th attempt, I try to drag my tile up & sideways. Once I do it the tile automatically gets right shifted and out of the frame(even though my touch is still holding it). It can be visible only when I drag it left. Weird!
Now take a look at my code
In my MainActivity's onCreateMethod
val layoutmanager = StaggeredGridLayoutManager(if (resources.configuration.orientation == Configuration.ORIENTATION_LANDSCAPE) 3 else 2, StaggeredGridLayoutManager.VERTICAL)
layoutmanager.gapStrategy = StaggeredGridLayoutManager.GAP_HANDLING_MOVE_ITEMS_BETWEEN_SPANS
recyclerView.layoutManager = layoutmanager
noteAdapter = NoteAdapter(myList, this)
recyclerView.adapter = noteAdapter
My ItemTouchHelperCallback
method
private val itemTouchHelperCallback =
object :
ItemTouchHelper.SimpleCallback(0, 0
) {
override fun isLongPressDragEnabled(): Boolean {
return true
}
override fun isItemViewSwipeEnabled(): Boolean {
return true
}
override fun getMovementFlags(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder): Int {
val dragFlags = ItemTouchHelper.UP or ItemTouchHelper.DOWN or
ItemTouchHelper.LEFT or ItemTouchHelper.RIGHT
val swipeFlags = ItemTouchHelper.START or ItemTouchHelper.END
return makeMovementFlags(dragFlags, swipeFlags)
}
override fun onMove(
recyclerView: RecyclerView,
viewHolder: RecyclerView.ViewHolder,
target: RecyclerView.ViewHolder
): Boolean {
val fromPosition = viewHolder.adapterPosition
val toPosition = target.adapterPosition
if (fromPosition < toPosition) {
for (i in fromPosition until toPosition) {
Collections.swap(myList, i, i + 1)
}
} else {
for (i in fromPosition downTo toPosition + 1) {
Collections.swap(myList, i, i - 1)
}
}
noteAdapter.notifyItemMoved(fromPosition, toPosition)
return false
}
override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {
}
}
from Jumbled tiles in itemTouchHelperCallback in StaggeredGridLayoutManager
No comments:
Post a Comment