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()
应该会自动为您解决这个问题。我不知道,我可以保存可见性状态。保存布尔值似乎是一个更好的选择,谢谢。我不知道,我可以保存可见性状态。不过,保存布尔值似乎是一个更好的选择,谢谢。