【发布时间】:2021-01-05 11:46:34
【问题描述】:
我在我的代码中使用StaggeredGridLayoutManager。
先看看这个:
我面临这些问题:
在第一次尝试中,我将磁贴“1”直接向上移动了一步,然后停止。一切看起来都不错,标记为“1”的图块替换了标签“2”。
在第二次尝试中,我向上拖动标有“3”的图块,但不要停止。它仍然会自动被“3”上方的“1”替换。这里出了点问题。
在我的第 3 次和第 4 次尝试中,我尝试将我的图块向上和横向拖动。一旦我这样做了,瓷砖就会自动右移并移出框架(即使我的触摸仍然握着它)。只有当我向左拖动它时才能看到它。奇怪!
现在看看我的代码
在我的 MainActivity 的 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
我的ItemTouchHelperCallback 方法
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) {
}
}
更新
@Zain 发现真正的问题隐藏在我的NoteAdapter.java 中,所以我强调了错误的方法。检查他的答案。
@Override
public int getItemViewType(int position) {
return position;
}
【问题讨论】:
-
如果你能在 Github 上提供一个演示项目,我们可以很容易地重现问题,这样我们就不会花任何时间在项目设置上。
-
我已经在github上上传了这个项目。您可以使用此提交下载:github.com/anandarpit/Notify/tree/… 谢谢! @HarisDautović
标签: android kotlin android-recyclerview staggered-gridview