回答:
強制的にTextView
その状態を保存したい場合は、freezesText
属性を追加する必要があります。
<TextView
...
android:freezesText="true" />
のドキュメントからfreezesText
:
設定されている場合、テキストビューには、現在のカーソル位置などのメタデータに加えて、凍結されたつららの内部に現在の完全なテキストが含まれます。デフォルトでは無効になっています。テキストビューのコンテンツがコンテンツプロバイダーなどの永続的な場所に保存されていない場合に役立ちます。
方向変更に関するデータを保持するには、次の2つの方法を実装する必要があります。
@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"
ドキュメントから:
「しかし、アプリケーションは常にシャットダウンし、以前の状態をそのままにして再起動できる必要があります。アプリケーションの再起動を妨げることができない他の構成変更があるためだけでなく、ユーザーが着信を受信したときなどのイベントを処理するためにも電話してからアプリケーションに戻ります。」
JAL
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>
追加するだけ
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" />`
最初は2番目の方法でしたが、修正すると状態が保持されました。