Подтвердить что ты не робот

Лучший способ изменить порядок элементов в Android 4+ ListView

Переупорядочение элементов ListView на iOS довольно просто. Теперь я хотел бы сделать то же самое на Android, но это кажется довольно громоздким: переупорядочение элементов не поддерживается SDK, и его приходится реализовывать самостоятельно или использовать стороннюю реализацию.

Я нашел несколько статей и постов, посвященных этому вопросу, но все они были довольно старыми (2-3 года). Например, bauerca DragSortListView упоминается во многих местах, но проект больше не поддерживается. Так как мое приложение должно поддерживать только Android 4+, я хотел спросить, а лучше ли это сделать?

Конечно, перетаскивание с помощью перетаскивания было бы наиболее удобным способом для пользователя, но я открыт для любого решения, которое работает (например, используя контекстное меню с вверх/вниз)

Каков наилучший способ переупорядочить элементы в Android 4+?

Есть ли что-то вроде стандартного/стандартного способа сделать это?

4b9b3361

Ответ 2

DragListView можно использовать, если вы хотите изменить порядок элементов в списке, сетке или на доске. Он также поддерживает горизонтальное перелистывание элементов в списке.

я нашел несколько ссылок, они помогут вам

Посетите https://github.com/woxblom/DragListView

https://www.youtube.com/watch?v=DbKqENKCio0

Ответ 3

Этот вопрос довольно старый, однако он возникает первым при поиске "Лучший способ изменить порядок элементов списка в Android", и он остался без ответа.

ОП запросил 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);