Как сохранить данные в режиме рециркуляции при ориентации экрана от портрета до пейзажа? - PullRequest
0 голосов
/ 06 апреля 2019

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

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

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

Ответы [ 3 ]

1 голос
/ 06 апреля 2019
  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());
                }
            });
        }
    }
    
  4. В OnCreate извлеките данные о вашем цвете:

       public void onCreate(Bundle bundle) {
       if (bundle != null) {
       value = bundle.getInt("color");
       }
    }
    
0 голосов
/ 06 апреля 2019

"Но когда экран ориентирован, представление обновляется."

  • при повороте экрана создается новый экземпляр действия

Вы можете иметь класс ViewModel, которыйхранит ваш массив данных, включая их текущее состояние.Когда действие воссоздается через ротацию, оно сохраняется и вы получаете правильное состояние.

Ссылка: https://medium.com/androiddevelopers/viewmodels-a-simple-example-ed5ac416317e

0 голосов
/ 06 апреля 2019

Вы можете хранить статусы каждого квадрата в надлежащем формате и сохранять их на onSaveInstanceState, получать их методом onCreate и манипулировать адаптером в соответствии с вашими требованиями.

Подробнее...

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...