Как изменить положение элемента в представлении Recycler View

Я работаю над приложением для Android, в котором есть вид утилизации. У меня есть элементы, заказанные случайным образом в представлении ресайклера. Я хочу переместить пятый пункт списка на первую позицию. И переместите элемент, ранее находившийся в первой позиции, во вторую позицию. Кто-нибудь может мне помочь с этим, пожалуйста?

2
0
3 610
2

Ответы 2

Вы можете использовать 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);

Вы знаете, как сохранить эту позицию, потому что я сделал с Collections.swap(), что это работает, но не сохраняет позицию, когда приложение закрывается и снова открывается.

Abedin.Zhuniqi 20.02.2019 11:17

Вам необходимо сохранить эту позицию, когда пользователь где-то закроет приложение, а затем, когда пользователь откроет эту сохраненную позицию.

AskNilesh 20.02.2019 11:19

Как мы можем сохранить эту позицию, когда вы ответили?

Abedin.Zhuniqi 03.06.2019 23:39

@Spritzig, как вы хотите сохранить позицию и какую позицию вы хотите сохранить

AskNilesh 04.06.2019 05:30

Я добавлю вопрос в SO и дам вам знать.

Abedin.Zhuniqi 04.06.2019 11:19

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();

Другие вопросы по теме