onRestoreInstanceState 未重新加载所有视图

onRestoreInstanceState Not Reloading All Views

我正在开发一个应用程序,用户可以在该应用程序中填写包含照片和一些 yes/no 问题的表格。选择是时,您需要在对话中添加额外信息。然后这个信息被插入到一个 TextView 并且这个 TextView 被插入到一个 LinearLayout.

问题是,当用户切换到另一个应用程序时,此屏幕会转到后台,然后被 Android 销毁(因为系统需要内存)。然后当用户 return 进入应用程序时,调用 onRestoreInstanceState() 方法,带回一些变量但不带回 LinearLayout 中的 TextView 。我正在对这些变量使用 Android 注释 return。我如何恢复那些 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");}

对不起我的英语初学者。 提前致谢。

基于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);
}

据我所知onRestoreInstanceState不会恢复您的观点。 onCreateonRestoreInstanceState 使用相同的 Bundle 因此初始化您的视图并检查 onCreate 中的 savedInstanceState。查看下面的文档。

https://developer.android.com/reference/android/app/Activity.html#onRestoreInstanceState(android.os.Bundle)

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

如果您希望Android自动将状态保存在onSaveInstanceState

中,您的视图需要有一个ID