Answers:
如果要强制TextView
保存状态,则必须添加freezesText
属性:
<TextView
...
android:freezesText="true" />
从以下文档freezesText
:
如果设置,则文本视图除了其当前光标位置等元数据外,还将在其冻结的冰柱内包括其当前的完整文本。默认情况下,它是禁用的;当文本视图的内容未存储在诸如内容提供者之类的持久位置时,此功能很有用
为了保留有关方向更改的数据,您需要实现两种方法:
@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);
}
1)并非所有具有ID的视图都保存其状态。具有状态可以由用户更改其状态的ID的Android小部件似乎可以将其状态保存为轻击。因此,EditText保存其状态,但TextView不会在软终止时保存其状态。
“ AFAIK,Android仅会为预期会更改的内容保存状态。这就是为什么它将文本保存在EditText中(用户可能会更改)的原因,并且可能不会保存TextView的状态(通常保持静态) )”
马克·M
因此,您可以选择将文本视图的状态保存在onSaveInstanceState中,也可以选择将文本视图的状态保存在onCreate中。
2)最佳做法是保存“内部”非视图实例状态,即使您声明
android:configChanges= "orientation|keyboardHidden"
从文档:
“但是,您的应用程序应该始终能够关闭并重新启动,并保持其先前的状态不变。这不仅是因为您无法阻止其他配置更改而无法重新启动应用程序,而且还可以处理诸如用户收到传入消息之类的事件电话,然后返回到您的应用程序。”
日航
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>
通过将AndroidManifest.xml中的活动添加到您的一个或多个活动中,以覆盖方向更改行为,从而对其进行修改:
android:configChanges="orientation|keyboardHidden"
它看起来应该像这样:
<activity android:name=".activity.LoginActivity"
android:configChanges="orientation|keyboardHidden"
android:label="@string/app_name">
</activity>
将它们添加到AndroidManifest.xml
中将您的活动名称放置在Activity_Name的位置
<activity android:name="Activity_Name"
android:screenOrientation="sensor"
...
android:configChanges="orientation|keyboardHidden|screenSize">
这也适用于更改TextField的值。
只需添加
android:configChanges="orientation|screenSize"
您在AndroidManifest.xml中的活动。
更改配置后,Android默认会重新启动您的活动。要更改此设置,您应该重写onConfigurationChanged()
方法。另外,您应该添加android:configChanges
到清单文件。
您可以在这里阅读更多内容。
我也用过
android:configChanges="orientation"
它没有用。
但是后来我找到了解决方案。
验证是否最正确地包含以下行:
<uses-sdk android:minSdkVersion="11" android:targetSdkVersion="11" />
确保它不会读取类似
<uses-sdk android`:minSdkVersion="11" android:targetSdkVersion="15" />`
我以第二种方式获得了第一名,但是当我更正它时,状态得以保留。