android - 片段保存视图状态
问题描述
我有一些具有这种结构的片段:
<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>
在 Fragment 类里面我有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
。
在 Fragment 类中,我还设置了使用某些功能显示的图像:
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
它会恢复它的所有子状态吗?
解决方案
在 Fragment 类中,声明一个私有变量:
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()
已经为您解决了这个问题。
推荐阅读
- monte-carlo-tree-search - 蒙特卡洛树搜索的选择功能重复找到相同的节点
- node.js - 如何使 docker 容器创建的 node_module 文件夹与本地同步?
- javascript - 如何更改 FormData() 的值以接收文本框的值?
- javascript - 管道文件时如何使javascript正则表达式匹配所有行
- airflow - 如何修复 AIRFLOW 一日滞后问题
- android - 类型参数不在其范围内:应该是 Kotlin Android 的“NavArgs”的子类型
- python - Python exec 脚本定义在 db postgres 中
- java - 试图让用户输入的字符串保存双变量的值
- c - 为什么子进程运行代码意味着父进程
- python - 有没有办法从表格的两列生成 matplotlib 图?