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

And*_*ord 36 android listview android-listview

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

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

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

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

有没有像默认/标准的方式这样做?

113*_*408 9

这个问题已经很老了,但是当您搜索“在 Android 中重新排序列表项的最佳方法”时,它首先出现,但仍然没有答案。

OPListView在提问时要求他们是最常用的。今天,最好使用 ,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);
Run Code Online (Sandbox Code Playgroud)