在iOS上重新排序ListView
项目非常简单。现在我想在Android上做同样的事情,但它看起来很麻烦:SDK不支持项目重新排序,并且必须自己实现它或者使用第三方实现。
我找到了几个处理这个问题的文章和帖子,但它们都很老(2 - 3年)。例如,bauerca DragSortListView在许多地方被引用,但不再维护该项目。由于我的应用程序应该支持Android 4+,我只想询问是否有更好的做法。
当然拖放重新排序对于用户来说是最方便的方式,但我对任何有效的解决方案都是开放的(例如使用带有向上/向下的上下文菜单)
在Android 4 +中提供商品重新排序的最佳方式是什么?
是否有类似默认/标准方式的做法?
答案 0 :(得分:3)
这个问题已经很老了,但是当您搜索“在Android中重新排序列表项的最佳方法”时,它首先出现,但是仍然没有答案。
OP在问问题时要求ListView
,因为它们是最常用的。今天,最好使用RecyclerView
,因为它比ListView
具有许多优势。这些优势之一就是我们需要实现重新排序,即。 ItemTouchHelper
。
要了解如何实现RecyclerView
,请看以下示例:
https://github.com/googlesamples/android-RecyclerView
要实现重排序的部分是附加到RecyclerView
如下:
mRecyclerView = (RecyclerView) rootView.findViewById(R.id.recyclerView);
ItemTouchHelper touchHelper = new ItemTouchHelper(new ItemTouchHelper.Callback() {
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
Collections.swap(dataList, viewHolder.getAdapterPosition(), target.getAdapterPosition());
mAdapter.notifyItemMoved(viewHolder.getAdapterPosition(), target.getAdapterPosition());
return true;
}
@Override
public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
// no-op
}
@Override
public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
return makeFlag(ItemTouchHelper.ACTION_STATE_DRAG,
ItemTouchHelper.DOWN | ItemTouchHelper.UP | ItemTouchHelper.START | ItemTouchHelper.END);
}
});
touchHelper.attachToRecyclerView(mRecyclerView);