Страницы

Поиск по вопросам

среда, 29 января 2020 г.

Сохранение View-элементов, которые были добавлены через код

#java #android #view


Есть такая проблема, все view элементы, которые были добавлены через код (их нет
в xml файле) пропадают (что логично), когда я либо переворачиваю экран или скрываю
приложение.

Вопрос, как сделать так, чтобы все эти view элементы сохранялись и не пропадали? 
    


Ответы

Ответ 1



Первый вариант. Вы можете попробовать самостоятельно обработать операцию изменения конфигурации. Для этого в манифест добавьте android:configChanges: И после этого вы можете обрабатывать изменение конфигурации в классе onConfigurationChanged вашего активити (в примере MyActivity), например: @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); // Checks the orientation of the screen if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show(); } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){ Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show(); } } Подробнее можно почитать тут. Второй вариант. Присвоить идентификатор вашему View и создать класс-контейнер для данных, которые вы хотите сохранить. Переопределить метод onSaveInstanceState() у View и возвращать в нем экземпляр контейнера. А также переопределить метод onRestoreInstanceState(Parcelable state) (при этом важно, что этот метод получает на вход именно Parcelable - собственный Parcelable, являющийся наследником android.view.View.BaseSavedState, а не Bundle!), получать из контейнера сохраненные данные и применять их к компоненту. Более подробно и пример кода можете посмотреть тут.

Ответ 2



Исследуйте жизненный цикл Activity. В нем прописаны все случаи (в т.ч. скрытие, смена положения экрана), при которых необходимо создавать и отрисовывать все View's заново.

Ответ 3



Для решения таких проблем придумали метод onResume(), который вызывается, когда нужно возобновить некую активность с пользователем. Не важно будь то Activity или Fragment. Поместите ваш код инициализации вью-элементов в него. public void onResume(){ super.onResume(); initViews(); }

Ответ 4



Все view-элементы имеющие id восстанавливаются систематически ,но если вы создали элемент путем программного кода ,то тогда вам надо поместить значение этого элелемента в Sp потом при надобности их от-тудаже и достать ,вот краткий мануал об этом прошу http://developer.alexanderklimov.ru/android/theory/sharedpreferences.php

Ответ 5



Пропишите в манифесте к вашему Activity: android:configChanges="orientation|screenSize|keyboardHidden"

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

Отправить комментарий