屏幕旋转后恢复TextView的状态?
在我的应用程序中,我有TextView
和EditText
。 两者都有数据。 当屏幕方向改变时, EditText
的数据仍然存在,但TextView
数据被清除。
有人可以帮我find一种在TextView
保留数据的方法吗?
如果你想强制你的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); }
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();
您还可以为活动select禁用方向更改
<activity android:name=".Activity" android:screenOrientation="portrait" > <intent-filter> <action android:name="android.intent.action.MAIN" /> </intent-filter> </activity>
1)不是所有具有ID的视图都保存它们的状态。 具有ID的Android小部件(其状态可以由用户更改)似乎将其状态保存在软件上。 所以EditText保存它的状态,但TextView不保存它的状态在一个软杀死。
“AFAIK,Android只会保存状态,以便预期会改变的东西,这就是为什么它保存在一个EditText(用户可能会改变)的文本,也许不保存一个TextView的状态(通常保持静态)”
马克M
所以你可以select在onSaveInstanceState中保存textview的状态,你可以select在onCreate中恢复textview的状态。
2)最好的做法是保存“内部”的非视图实例状态,即使你声明
android:configChanges= "orientation|keyboardHidden"
从文档:
“但是,应用程序应该始终能够closures并重新启动其先前的状态,不仅因为其他configuration更改无法阻止重新启动应用程序,而且还会处理事件,例如用户收到传入电话,然后返回到您的应用程序。“
JAL
在AndroidManifest.xml中修改您的活动,将其添加到您的活动/活动中以覆盖方向更改行为:
android:configChanges="orientation|keyboardHidden"
它应该看起来像这样:
<activity android:name=".activity.LoginActivity" android:configChanges="orientation|keyboardHidden" android:label="@string/app_name"> </activity>
当configuration更改时,Android会默认重新启动您的活动。 要改变这个,你应该重写onConfigurationChanged()
方法。 另外,你应该添加android:configChanges
到你的清单文件。
你可以在这里阅读更多。
我也用了
android:configChanges="orientation"
并没有工作。
但后来我find了一个解决scheme。
确认你最好的人是否有以下的行:
<uses-sdk android:minSdkVersion="11" android:targetSdkVersion="11" />
确保它不读取类似的东西
<uses-sdk android`:minSdkVersion="11" android:targetSdkVersion="15" />`
我把它放在第一位,但是当我纠正它时,状态得到了保留。