#android #android-recyclerview #screen-orientation
#Android #android-recyclerview #ориентация экрана
Вопрос:
У меня есть пользовательский массив объектов для отображения в режиме рециркуляции, и я использую GridLayout manager для моего recylerview и отображения (2×4), (3×3) и т.д. квадраты. Когда пользователь нажимает на эти квадраты, цвет меняется.
Но при ориентации экрана просмотр обновляется.
Мой вопрос в том, как сохранить эти данные (цвет выбранного квадрата) при ориентации экрана?
Комментарии:
Ответ №1:
-
Создайте интерфейс:
public interface ClickCallback { void onItemClicked(String id); }
-
В вашей активности создайте обратный вызов и передайте его вашему адаптеру следующим образом:
ClickCallback callback = new ClickCallback() { @Override public void onItemClicked(String id) { //your list item object must have a method to get color color = yourDataList.get(id).getColor(); } }; protected void onSaveInstanceState(Bundle bundle) { super.onSaveInstanceState(bundle); bundle.putInt("color", color); } YourAdapter adapter = new YourAdapter (yourDataList, callback)
-
В вашем адаптере не забудьте установить OnClickListener и вызвать соответствующий метод, это может быть так:
public ListItemViewHolder(View itemView) { super(itemView); //your code itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { callback.onItemClicked(getAdapterPosition()); } }); } }
-
В onCreate извлеките ваши данные о цвете:
public void onCreate(Bundle bundle) { if (bundle != null) { value = bundle.getInt("color"); } }
-
Ответ №2:
Вы можете сохранять статусы каждого квадрата в надлежащем формате и onSaveInstanceState
извлекать их onCreate
методом и управлять адаптером в соответствии с вашими требованиями.
Надеюсь, это поможет!
Ответ №3:
«Но при ориентации экрана просмотр обновляется».
- при повороте экрана создается новый экземпляр действия
У вас может быть класс ViewModel, который хранит ваш массив данных, включая их текущее состояние. Когда действие будет воссоздано с помощью поворота, это будет сохранено, и вы получите правильное состояние.
Ссылка:https://medium.com/androiddevelopers/viewmodels-a-simple-example-ed5ac416317e