web-dev-qa-db-ja.com

Android 4+ ListViewでアイテムを並べ替える最良の方法

ListViewアイテムの並べ替えは、iOSでは非常に簡単です。 Android=で同じことをしたいのですが、かなり扱いにくいようです:アイテムの並べ替えはSDKでサポートされていないため、独自に実装するか、3番目を使用する必要がありますパーティの実装。

この質問に関する記事や投稿をいくつか見つけましたが、それらはすべてかなり古いもの(2〜3年)でした。たとえば bauerca DragSortListView は多くの場所で参照されていますが、プロジェクトは維持されていません。私のアプリはAndroid 4+のみをサポートする必要があるので、その間にこれを行う方が良いかどうか尋ねたかったのです。

もちろん、ドラッグアンドドロップの並べ替えがユーザーにとって最も便利な方法ですが、機能する解決策があります(たとえば、上下にコンテキストメニューを使用します)。

Android 4 +?でアイテムを並べ替える最良の方法は何ですか?

これを行うデフォルト/標準的な方法のようなものはありますか?

36
Andrei Herford

この質問はかなり古くからですが、「Androidでリストアイテムを並べ替える最良の方法」を検索すると最初に表示され、回答がありませんでした。

OPはListViewを質問しました。質問の時点で、それらは最も一般的に使用されていたためです。今日では、RecyclerViewよりも多くの利点があるため、ListViewを使用することをお勧めします。これらの利点の1つは、並べ替えを実装するために必要なものです。 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);
3
113408