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
不会恢复您的观点。 onCreate
和 onRestoreInstanceState
使用相同的 Bundle
因此初始化您的视图并检查 onCreate
中的 savedInstanceState
。查看下面的文档。
https://developer.android.com/training/basics/activity-lifecycle/recreating.html#RestoreState
如果您希望Android自动将状态保存在onSaveInstanceState
中,您的视图需要有一个ID
我正在开发一个应用程序,用户可以在该应用程序中填写包含照片和一些 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
不会恢复您的观点。 onCreate
和 onRestoreInstanceState
使用相同的 Bundle
因此初始化您的视图并检查 onCreate
中的 savedInstanceState
。查看下面的文档。
https://developer.android.com/training/basics/activity-lifecycle/recreating.html#RestoreState
如果您希望Android自动将状态保存在onSaveInstanceState
中,您的视图需要有一个ID