片段保存视图状态
Fragment save view state
我有一些具有这种结构的片段:
<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>
在片段 class 里面我有 onSaveInstanceState
和 onActivityCreated
:
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString("tv", panel_tv.getText().toString());
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
if (savedInstanceState != null)
panel_tv.setText(savedInstanceState.getString("tv"));
}
所以它解决了保存TextView
的状态。
Inside Fragment class 我还设置了使用某些功能显示的图像:
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
的状态,它会恢复所有子项的状态吗?
在您的片段中 class,声明一个私有变量:
private boolean condition; // rename to something more descriptive
现在在 setIcon()
中存储值:
this.condition = condition;
最后将其保存到 onSaveInstanceState()
中的包中:
outState.putBoolean("condition", this.condition);
并在onActivityCreated()
阅读:
this.condition = savedInstanceState.getBoolean("condition");
this.setIcon(this.condition);
备注
您不需要保存 TextView
中的文本。调用 super.onSaveInstanceState()
已经为您解决了这个问题。
您可以将 condition
保存在 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"));
我有一些具有这种结构的片段:
<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>
在片段 class 里面我有 onSaveInstanceState
和 onActivityCreated
:
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString("tv", panel_tv.getText().toString());
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
if (savedInstanceState != null)
panel_tv.setText(savedInstanceState.getString("tv"));
}
所以它解决了保存TextView
的状态。
Inside Fragment class 我还设置了使用某些功能显示的图像:
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
的状态,它会恢复所有子项的状态吗?
在您的片段中 class,声明一个私有变量:
private boolean condition; // rename to something more descriptive
现在在 setIcon()
中存储值:
this.condition = condition;
最后将其保存到 onSaveInstanceState()
中的包中:
outState.putBoolean("condition", this.condition);
并在onActivityCreated()
阅读:
this.condition = savedInstanceState.getBoolean("condition");
this.setIcon(this.condition);
备注
您不需要保存 TextView
中的文本。调用 super.onSaveInstanceState()
已经为您解决了这个问题。
您可以将 condition
保存在 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"));