屏幕旋转后恢复TextView的状态?

在我的应用程序中,我有TextViewEditText 。 两者都有数据。 当屏幕方向改变时, 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" />` 

我把它放在第一位,但是当我纠正它时,状态得到了保留。