在Android 4+ ListView中重新排序项目的最佳方法

时间:2014-06-17 07:58:05

标签: android listview android-listview

在iOS上重新排序ListView项目非常简单。现在我想在Android上做同样的事情,但它看起来很麻烦:SDK不支持项目重新排序,并且必须自己实现它或者使用第三方实现。

我找到了几个处理这个问题的文章和帖子,但它们都很老(2 - 3年)。例如,bauerca DragSortListView在许多地方被引用,但不再维护该项目。由于我的应用程序应该支持Android 4+,我只想询问是否有更好的做法。

当然拖放重新排序对于用户来说是最方便的方式,但我对任何有效的解决方案都是开放的(例如使用带有向上/向下的上下文菜单)

在Android 4 +中提供商品重新排序的最佳方式是什么?

是否有类似默认/标准方式的做法?

1 个答案:

答案 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);