Android 片段保存视图状态
我有一些具有这种结构的片段:Android 片段保存视图状态,android,android-layout,android-fragments,onsaveinstancestate,Android,Android Layout,Android Fragments,Onsaveinstancestate,我有一些具有这种结构的片段: <RelativeLayout android:id="@+id/control_panel" android:visibility="gone"> <RelativeLayout android:id="@+id/control_panel_icon"> <ImageView android:id
<RelativeLayout
android:id="@+id/control_panel"
android:visibility="gone">
<RelativeLayout
android:id="@+id/control_panel_icon">
<ImageView
android:id="@+id/control_panel_icon_1"
android:src="@drawable/ic_control_panel_icon_1" />
<ImageView
android:id="@+id/control_panel_icon_2"
android:src="@drawable/ic_control_panel_icon_2"
android:visibility="gone"/>
</RelativeLayout>
<TextView
android:id="@+id/control_panel_tv"
android:text="@string/not_available" />
</RelativeLayout>
因此,它解决了保存TextView
的状态的问题
在Fragment class I内部,还设置了要使用某些函数显示的图像:
public void setIcon(boolean condition){
if (condition) {
control_panel_icon_1.setVisibility(View.GONE);
control_panel_icon_2.setVisibility(View.VISIBLE);
} else {
control_panel_icon_1.setVisibility(View.VISIBLE);
control_panel_icon_2.setVisibility(View.GONE);
}
}
有没有办法保存和恢复当前显示的图像
我知道,我所做的不应该保存整个小部件,但是如果我可以保存
RelativeLayout的状态,它会恢复所有它的子状态吗?在片段类中,声明一个私有变量:
private boolean condition; // rename to something more descriptive
现在在setIcon()
中存储值:
this.condition = condition;
最后将其保存到onSaveInstanceState()中的捆绑包中:
并在ActivityCreated()上的中阅读:
注意
您不需要保存TextView
中的文本。调用super.onSaveInstanceState()
已经为您解决了这个问题。在片段类中,声明一个私有变量:
private boolean condition; // rename to something more descriptive
现在在setIcon()
中存储值:
this.condition = condition;
最后将其保存到onSaveInstanceState()中的捆绑包中:
并在ActivityCreated()上的中阅读:
注意
您不需要保存TextView
中的文本。调用super.onSaveInstanceState()
已经为您解决了这一问题。您可以将条件保存在超出状态中,如下所示:
outState.putBoolean("condition", condition);
然后阅读并更新图像视图
setIcon(savedInstanceState.getBoolean("condition"))
或者,您可以通过putInt
方法保存图像视图的可见性状态:
outState.putInt("ic1", control_panel_icon_1.getVisibility());
outState.putInt("ic2", control_panel_icon_2.getVisibility());
然后恢复状态:
control_panel_icon_1.setVisibility(savedInstanceState.getInt("ic1"));
control_panel_icon_2.setVisibility(savedInstanceState.getInt("ic2"));
您可以在outState
中保存条件,如下所示:
outState.putBoolean("condition", condition);
然后阅读并更新图像视图
setIcon(savedInstanceState.getBoolean("condition"))
或者,您可以通过putInt
方法保存图像视图的可见性状态:
outState.putInt("ic1", control_panel_icon_1.getVisibility());
outState.putInt("ic2", control_panel_icon_2.getVisibility());
然后恢复状态:
control_panel_icon_1.setVisibility(savedInstanceState.getInt("ic1"));
control_panel_icon_2.setVisibility(savedInstanceState.getInt("ic2"));
在你的fragment类中,你如何决定显示哪个ImageView和隐藏哪个?@Code学徒我已经更新了这个问题。你仍然需要提供更多细节。什么是“条件”?您真的有一个名为condition
的变量吗?或者你只是用这个名字替换了你的真实代码?@code学徒这只是一个布尔值。再次更新。然后,您只需在saveInstanceState()
期间存储该布尔值,并在activityCreated()期间将其读回。请注意,在TextView中保存文本是不必要的,因为调用super.onSaveInstanceState()
会自动为您解决这一问题。在fragment类中,您如何决定显示哪个ImageView和隐藏哪个ImageView?@code学徒我已经更新了问题。您仍然需要提供更多详细信息。什么是“条件”?您真的有一个名为condition
的变量吗?或者你只是用这个名字替换了你的真实代码?@code学徒这只是一个布尔值。再次更新。然后,您只需在saveInstanceState()
期间存储该布尔值,并在activityCreated()期间将其读回。请注意,在TextView中保存文本是不必要的,因为调用super.onSaveInstanceState()
应该会自动为您解决这个问题。我不知道,我可以保存可见性状态。保存布尔值似乎是一个更好的选择,谢谢。我不知道,我可以保存可见性状态。不过,保存布尔值似乎是一个更好的选择,谢谢。