Я делаю приложение со списком дел, и после того, как пользователь нажимает кнопку, я создаю новый GridLayout (и все данные о времени и имени задачи внутри него) и добавляю его в свой RelativeLayout. Как мне сохранить эти GridLayout в пользовательском интерфейсе, чтобы после того, как действие было уничтожено и снова запущено, эти макеты были там.
После нажатия кнопки я запускаю метод Create Activity
public void CreateActivity(String name,int hours, int minutes,int i)
{
RelativeLayout.LayoutParams relparams= new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT,RelativeLayout.LayoutParams.WRAP_CONTENT);
relparams.addRule(RelativeLayout.BELOW,i);
relparams.setMargins(0,50,0,100);
Glayouts.add(new GridLayout(this));
Glayouts.get(i+1).setBackgroundColor(Color.GRAY);
Glayouts.get(i+1).setMinimumWidth(relative.getWidth());
Glayouts.get(i+1).setId(i+1);
Glayouts.get(i+1).setPadding(10,0,0,0);
GridLayout.LayoutParams namee = new GridLayout.LayoutParams();
namee.columnSpec = GridLayout.spec(0);
namee.rowSpec = GridLayout.spec(0);
namee.setGravity(Gravity.LEFT);
final TextView Actname = new TextView(this);
Actname.setText(name);
GridLayout.LayoutParams checkbox = new GridLayout.LayoutParams();
checkbox.columnSpec = GridLayout.spec(1);
checkbox.rowSpec = GridLayout.spec(0);
checkbox.setGravity(Gravity.RIGHT);
CheckBox check = new CheckBox(this);
// ADDING TO LAYOUT
Glayouts.get(i+1).addView(Actname,namee);
Glayouts.get(i+1).addView(check,checkbox);
relative.addView(Glayouts.get(i+1),relparams);
Спасибо за ответ, я добавил свой метод, который добавляет сетку. В основном он создает сетку внутри относительной, но когда я закрываю свое приложение и снова запускаю его, мой относительный макет снова становится пустым. Как мне сохранить этот GridLayout, чтобы он был там после повторного запуска приложения




Ты не можешь. Лучший способ сохранить состояние - использовать какой-либо механизм сохранения, например базу данных (я бы порекомендовал Номер, поскольку он официально поддерживается Google).
После нажатия кнопки вы должны поместить всю необходимую информацию (имя, часы, минуты) в базу данных, и после создания Activity вы можете прочитать все сохраненные данные и - на их основе - снова создать все необходимые макеты.
Другой вариант - хранить данные в SharedPreferences - его намного проще настроить, поэтому вы также можете начать с этого решения. Обратите внимание, я предлагаю это как первый шаг в мире постоянства в Android, а не как предпочтительное решение для хранения данных.
Вы можете объяснить голосование против?
Представления действительно имеют встроенный механизм сохранения состояния, поэтому «вы не можете» - это натянуто, даже если оно здесь не применимо (из-за программного построения макета). Также потому, что вы сказали «хранить данные в SharedPreferences», что, честно говоря, просто «нет-нет» в целом. Это может быть хранилище ключей и значений, но на самом деле это является просто большой файл XML.
Спасибо за объяснение, позвольте мне сослаться на это: 1. OP запросил механизм для сохранения состояний даже после повторного запуска приложения (объяснил это в комментарии). Состояние сохраняемости встроенного состояния представления не обеспечивает такой функциональности. 2. Я также уверен, что Room (или Realm, или другие решения) намного лучше, чем SharedPreferences для реальных приложений (я даже рекомендовал его в своем ответе), но ИМО, для новичков это неплохое решение, как и самый простой для начала. Ваше мнение может отличаться, но я не вижу причин для того, чтобы голосовать против.
@EpicPandaForce на основе вашего комментария я отредактировал свой ответ, чтобы уточнить, что SharedPreferences не является целевым решением.
Хм, я сначала подумал, что он имел в виду, когда вы переводите приложение в фоновый режим (с завершением процесса), а затем возвращайтесь. Какие просмотры обрабатывают делать. Но я думаю, это было натянуто: D ваш исправленный ответ лучше, поэтому я его отозвал
Теоретически, когда вы используете extends View, вы также можете переопределить методы onSaveInstanceState и onRestoreInstanceState, где вы должны предоставить свой собственный класс SavedState, который обычно extends BaseSavedState. Вы можете найти информацию об этом здесь
В вашем случае ваш макет динамический, поэтому на самом деле это не работает. Чтобы сказать вам правда, ваш макет, вероятно, не должен быть построен таким образом, вы должны визуализировать сетку с помощью RecyclerView на основе «модели», которая описывает этот макет, визуализировать элементы сетки через RecyclerView.Adapter, и вы должны сохраните либо «модель», либо данные, которые вы используете для построения этой модели, вместе с введенным пользователем состоянием, чтобы вы могли воссоздать модель, которая будет отображаться через ваш RecyclerView.
Вы можете узнать больше о RecyclerView здесь.
Вы можете узнать больше о сохранении данных здесь.
Вы можете прочитать об использовании onSaveInstanceState для сохранения данных в Activity / Fragments при изменении конфигурации и смерти процесса (но не до завершения, а затем перезапуска приложения) здесь.
Можете ли вы объяснить это более четко или опубликовать какой-либо пользовательский интерфейс. Чего именно вы хотите добиться?