kAn*_*NaN 102 android onconfigurationchanged android-layout android-orientation
在我的应用程序中我有TextView
和EditText
.两者都有数据.当屏幕方向更改EditText
剩余数据时,TextView
数据将被清除.
有人可以帮助我找到保留数据的方法TextView
吗?
ina*_*ruk 218
如果要强制TextView
保存其状态,则必须添加freezesText
属性:
<TextView
...
android:freezesText="true" />
Run Code Online (Sandbox Code Playgroud)
从文档freezesText
:
如果设置,除了元数据(如当前光标位置)之外,文本视图还将在其冻结冰柱内包含其当前完整文本.默认情况下,这是禁用的; 当文本视图的内容未存储在诸如内容提供者之类的持久位置时,它可能是有用的
Eri*_*vik 28
为了保留方向更改的数据,您需要实现两种方法:
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
// Read values from the "savedInstanceState"-object and put them in your textview
}
@Override
protected void onSaveInstanceState(Bundle outState) {
// Save the values you need from your textview into "outState"-object
super.onSaveInstanceState(outState);
}
Run Code Online (Sandbox Code Playgroud)
Android不会为您处理这类内容.您已手动保存所有数据.
您可以在活动中使用以保存值
@Override
public Object onRetainNonConfigurationInstance() {
HashMap<String, Object> savedValues = new HashMap<String, Object>();
savedValues.put("someKey", someData);
return savedValues;
}
Run Code Online (Sandbox Code Playgroud)
并在活动的oncreate方法中使用类似的东西来加载保存的对象
HashMap < String, Object> savedValues
= (HashMap<String, Object>)this.getLastNonConfigurationInstance();
Run Code Online (Sandbox Code Playgroud)
您还可以选择禁用活动的方向更改
<activity android:name=".Activity" android:screenOrientation="portrait" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
</intent-filter>
</activity>
Run Code Online (Sandbox Code Playgroud)
1)并非所有带ID的视图都保存其状态.具有ID的Android小部件,其状态可由用户更改,似乎将其状态保存为软杀死.因此EditText保存其状态,但TextView不会将其状态保存在软杀死中.
"据我所知,Android的唯一困扰节能状态对于预期改变的东西.这就是为什么它保存在一个EditText(其中用户可能更改)文本,也许不会保存一个TextView的状态(通常保持静态)"
马克
因此,您可以选择在onSaveInstanceState中保存textview的状态,并且可以选择在onCreate中恢复textview的状态.
2)即使您声明,最佳做法是保存"内部"非视图实例状态
android:configChanges= "orientation|keyboardHidden"
Run Code Online (Sandbox Code Playgroud)
来自文档:
"但是,你的应用程序应该总是能够关闭和其以前的状态重新启动完好,不仅因为有你无法从重新启动您的应用程序阻止,但也是为了处理事件,当用户接收到来电,如其他配置更改打电话然后返回你的应用程序."
JAL