在我的应用中,我有TextView
和EditText
。两者都有数据。当屏幕方向改变时,EditText
中的数据仍然存在,但TextView
数据已被清除。
有人可以帮助我找到一种方法来保留TextView
中的数据吗?
答案 0 :(得分:217)
如果您想强制TextView
保存其状态,则必须添加freezesText
属性:
<TextView
...
android:freezesText="true" />
来自freezesText
的文档:
如果设置,除了元数据(如当前光标位置)之外,文本视图还将在其冻结冰柱内包含其当前完整文本。默认情况下,这是禁用的;当文本视图的内容未存储在诸如内容提供者
之类的持久位置时,它会很有用
答案 1 :(得分: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);
}
答案 2 :(得分:6)
Android不会为您处理这类内容。您已手动保存所有数据。
您可以在活动中使用来保存值
@Override
public Object onRetainNonConfigurationInstance() {
HashMap<String, Object> savedValues = new HashMap<String, Object>();
savedValues.put("someKey", someData);
return savedValues;
}
并在活动的oncreate方法中使用类似的内容来加载已保存的对象
HashMap < String, Object> savedValues
= (HashMap<String, Object>)this.getLastNonConfigurationInstance();
您还可以为活动选择禁用方向更改
<activity android:name=".Activity" android:screenOrientation="portrait" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
</intent-filter>
</activity>
答案 3 :(得分:6)
1)并非所有带ID的视图都会保存其状态。具有ID的Android小部件,其状态可由用户更改,似乎将其状态保存为软杀死。因此EditText保存其状态,但TextView不会将其状态保存在软杀死。
“AFAIK,Android只会为预期的事情节省成本 更改。这就是为什么它将文本保存在EditText(用户是 可能会改变)并且可能不保存TextView(通常保持静态)的状态“
Mark M
因此,您可以选择在onSaveInstanceState中保存textview的状态,并且可以选择在onCreate中恢复textview的状态。
2)即使您声明
,最佳做法是保存“内部”非视图实例状态android:configChanges= "orientation|keyboardHidden"
来自文档:
“但是,您的应用程序应始终能够关闭并重新启动其先前的状态。不仅因为还有其他配置更改,您无法阻止重新启动应用程序,而且还要处理事件,例如用户接到来电,然后返回您的应用程序。“
JAL
答案 4 :(得分:1)
通过将此活动添加到您的活动/活动中,修改AndroidManifest.xml中的活动以覆盖方向更改行为:
android:configChanges="orientation|keyboardHidden"
它应该看起来像这样:
<activity android:name=".activity.LoginActivity"
android:configChanges="orientation|keyboardHidden"
android:label="@string/app_name">
</activity>
答案 5 :(得分:0)
将这些添加到AndroidManifest.xml
将您的活动名称放在 Activity_Name
<activity android:name="Activity_Name"
android:screenOrientation="sensor"
...
android:configChanges="orientation|keyboardHidden|screenSize">
这也适用于更改TextField的值。
答案 6 :(得分:0)
只需添加
android:configChanges="orientation|screenSize"
转到您在AndroidManifest.xml中的活动。
答案 7 :(得分:-2)
配置更改时Android会默认重启您的活动。要更改此设置,您应该覆盖onConfigurationChanged()
方法。此外,您应该将android:configChanges
添加到清单文件中。
您可以阅读更多here。
答案 8 :(得分:-7)
我也用过
android:configChanges="orientation"
它不起作用。
但后来我找到了解决方案。
验证您最熟练的是否正确使用以下行:
<uses-sdk android:minSdkVersion="11" android:targetSdkVersion="11" />
确保它不会读取类似
的内容<uses-sdk android`:minSdkVersion="11" android:targetSdkVersion="15" />`
我在第一时间采用了第二种方式,但是当我纠正它时,状态得到了保留。