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

#android #android-recyclerview #screen-orientation

#Android #android-recyclerview #ориентация экрана

Вопрос:

У меня есть пользовательский массив объектов для отображения в режиме рециркуляции, и я использую GridLayout manager для моего recylerview и отображения (2×4), (3×3) и т.д. квадраты. Когда пользователь нажимает на эти квадраты, цвет меняется.

Но при ориентации экрана просмотр обновляется.

Мой вопрос в том, как сохранить эти данные (цвет выбранного квадрата) при ориентации экрана?

Комментарии:

1. developer.android.com/topic/libraries/architecture/…

2. android.jlelse.eu/…

Ответ №1:

  1. Создайте интерфейс:

     public interface ClickCallback {
    
    void onItemClicked(String id);
    }
      
  2. В вашей активности создайте обратный вызов и передайте его вашему адаптеру следующим образом:

     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) 
      
  3. В вашем адаптере не забудьте установить OnClickListener и вызвать соответствующий метод, это может быть так:

            public ListItemViewHolder(View itemView) {
            super(itemView);
           //your code
            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    callback.onItemClicked(getAdapterPosition());
                }
            });
        }
    }
      
    1. В 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