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

在我的应用程序中,我有TextViewEditText 。 两者都有数据。 当屏幕方向改变时, EditText的数据仍然存在,但TextView数据被清除。

有人可以帮我find一种在TextView保留数据的方法吗?

    7 Solutions collect form web for “屏幕旋转后恢复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" />` 

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