onRestoreInstanceState не перезагружает все просмотры

Я разрабатываю приложение, в котором пользователи заполняют форму с фотографиями и задают несколько вопросов да / нет. Если выбрано "да", вам нужно добавить дополнительную информацию в диалог. Затем эта информация вставляется в TextView и это TextView вставлен в LinearLayout,

Проблема в том, что когда пользователь переключается на другое приложение, этот экран переходит в фоновый режим и впоследствии уничтожается Android (потому что системе нужна память). Затем, когда пользователь возвращается в приложение, onRestoreInstanceState() метод вызывается, возвращая некоторые переменные, но не TextView внутри LinearLayout, Я использую аннотации Android для возврата этих переменных. Как мне восстановить эти представления Android?

<LinearLayout
                android:id="@+id/estoque_zerado_pergunta_layout"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:orientation="vertical"
                android:visibility="visible">

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="@string/existe_estoque_zerado"
                    android:textSize="@dimen/abc_text_size_large_material"
                    android:layout_margin="5dp"/>

                <RadioGroup
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:orientation="horizontal">

                    <RadioButton
                        android:id="@+id/radio_estoque_zerado_sim"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="@string/sim" />

                    <RadioButton
                        android:id="@+id/radio_estoque_zerado_nao"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:checked="true"
                        android:text="@string/nao"/>

                </RadioGroup>

            </LinearLayout>

            <LinearLayout
                android:id="@+id/estoque_zerado_layout"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical"
                android:visibility="gone" >

                <LinearLayout
                    android:id="@+id/estoque_zerado_itens_layout"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:orientation="vertical" >

                    <!--Lista de itens aqui-->

                </LinearLayout>

                <LinearLayout
                    android:id="@+id/add_estoque_zerado_item"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:orientation="horizontal"
                    android:padding="5dp" >

                    <ImageView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:paddingRight="10dp"
                        android:src="@drawable/ic_adicionar"
                        android:contentDescription="@string/adicionar_estoque_zerado"/>

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="match_parent"
                        android:gravity="center_vertical"
                        android:text="@string/adicionar_estoque_zerado"
                        android:textSize="@dimen/abc_text_size_medium_material" />

                </LinearLayout>

            </LinearLayout>

@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);
    Log.d("onRestoreInstanceState", "onRestoreInstanceState: chamou onRestoreInstanceState");}

    @Override
public void onSaveInstanceState(Bundle bundle) {
    super.onSaveInstanceState(bundle);
    Log.d("onSaveInstanceState", "onSaveInstanceState: chamou onSaveInstanceState");}

Извините за мой начинающий английский. Заранее спасибо.

2 ответа

Решение

Насколько я знаю onRestoreInstanceState не восстанавливает ваши взгляды. onCreate а также onRestoreInstanceState использует тот же Bundle поэтому инициализируйте свои взгляды и проверьте savedInstanceState в onCreate, Проверьте документы ниже.

https://developer.android.com/reference/android/app/Activity.html

https://developer.android.com/training/basics/activity-lifecycle/recreating.html

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

Основано на https://developer.android.com/training/basics/activity-lifecycle/recreating.html

Вы должны сохранить переменную, которую хотите вернуть. в onSaveInstanceState вы сохраняете свои данные

static final String SAVE_STRING = "string_to_save";
...
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
    // Save variable value on bundle
    savedInstanceState.putInt(SAVE_STRING, yourstring);

    // Always call the superclass so it can save the view hierarchy state
    super.onSaveInstanceState(savedInstanceState);
}

тогда вы можете получить их в onRestoreInstanceState

public void onRestoreInstanceState(Bundle savedInstanceState) {
    // Always call the superclass so it can restore the view hierarchy
    super.onRestoreInstanceState(savedInstanceState);

    // Restore state members from saved instance
    yourstring = savedInstanceState.getInt(SAVE_STRING);
}
Другие вопросы по тегам