Я работаю над приложением для Android, в котором есть вид утилизации. У меня есть элементы, заказанные случайным образом в представлении ресайклера. Я хочу переместить пятый пункт списка на первую позицию. И переместите элемент, ранее находившийся в первой позиции, во вторую позицию. Кто-нибудь может мне помочь с этим, пожалуйста?
Вы можете использовать Collections.swap()
Swaps элементы в указанных позициях в указанном списке. (Если указанные позиции равны, вызов этого метода оставляет список без изменений.)МЕТОД
public static void swap(List<?> list,
int i,
int j)
Параметры:
list - The list in which to swap elements.
i - the index of one element to be swapped.
j - the index of the other element to be swapped.
ОБРАЗЕЦ КОДА
// first swap the item using Collections.swap() method
Collections.swap(yourList, firstPosition, positionToSwap);
// than notify your adapter about change in list using notifyItemMoved() method
YourAdapter.notifyItemMoved(firstPosition, positionToSwap);
Вам необходимо сохранить эту позицию, когда пользователь где-то закроет приложение, а затем, когда пользователь откроет эту сохраненную позицию.
Как мы можем сохранить эту позицию, когда вы ответили?
@Spritzig, как вы хотите сохранить позицию и какую позицию вы хотите сохранить
Я добавлю вопрос в SO и дам вам знать.
RecyclerView работает так: каждый раз, когда на экране появляется новый элемент, он вызывает ваш собственный подкласс RecyclerView.Adapter. Адаптер имеет ссылку на набор данных, из которого вы берете данные для представлений, и ему передается ViewHolder (макет элемента) и индексируется в onBindViewHolder(MyViewHolder holder, int position), чтобы взять dataset[position] и поместить данные в holder.textview.setText(dataset[position]).
Таким образом, чтобы поменять местами элементы, у вас есть 2 варианта:
переупорядочить данные в исходном наборе данных. Скорее всего, это какой-то ArrayList <>, и вы делаете TEMP=dataset[5];ArrayList.remove(TEMP);ArrayList.insert(TEMP,1); ArrayList сдвинет все по мере необходимости.
если важно сохранить набор данных нетронутым, вы можете переписать свой адаптер, чтобы он сохранял карту { position : dataset_index } и заполнял элементы в соответствии с этой картой. Это должно быть тривиально.
И тогда вам нужно обновить данные с помощью adapter.notifyDataSetChaged();
Вы знаете, как сохранить эту позицию, потому что я сделал с
Collections.swap(), что это работает, но не сохраняет позицию, когда приложение закрывается и снова открывается.