Ответ 1
Проверьте этот код пример Существует также видео-демонстрация, как это работает.
Переупорядочение элементов ListView
на iOS довольно просто. Теперь я хотел бы сделать то же самое на Android, но это кажется довольно громоздким: переупорядочение элементов не поддерживается SDK, и его приходится реализовывать самостоятельно или использовать стороннюю реализацию.
Я нашел несколько статей и постов, посвященных этому вопросу, но все они были довольно старыми (2-3 года). Например, bauerca DragSortListView упоминается во многих местах, но проект больше не поддерживается. Так как мое приложение должно поддерживать только Android 4+, я хотел спросить, а лучше ли это сделать?
Конечно, перетаскивание с помощью перетаскивания было бы наиболее удобным способом для пользователя, но я открыт для любого решения, которое работает (например, используя контекстное меню с вверх/вниз)
Каков наилучший способ переупорядочить элементы в Android 4+?
Есть ли что-то вроде стандартного/стандартного способа сделать это?
Проверьте этот код пример Существует также видео-демонстрация, как это работает.
DragListView можно использовать, если вы хотите изменить порядок элементов в списке, сетке или на доске. Он также поддерживает горизонтальное перелистывание элементов в списке.
я нашел несколько ссылок, они помогут вам
Этот вопрос довольно старый, однако он возникает первым при поиске "Лучший способ изменить порядок элементов списка в 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);