私のアプリにはTextView
と がありEditText
ます。どちらにもデータが含まれています。画面の向きが変わるとデータはそのままEditText
残りますが、TextView
データはクリアされます。
データを保持する方法を見つけるのを手伝ってくれる人TextView
もいますか?
私のアプリにはTextView
と がありEditText
ます。どちらにもデータが含まれています。画面の向きが変わるとデータはそのままEditText
残りますが、TextView
データはクリアされます。
データを保持する方法を見つけるのを手伝ってくれる人TextView
もいますか?
状態を強制的に保存する場合は、属性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);
}
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>
1) ID を持つすべてのビューが状態を保存するわけではありません。ユーザーが状態を変更できる ID を持つ Android ウィジェットは、ソフト キルで状態を保存しているように見えます。そのため、EditText は状態を保存しますが、TextView はソフト キルで状態を保存しません。
「私の知る限り、Androidは変更が予想されるものの状態を保存するだけです。そのため、テキストをEditText(ユーザーが変更する可能性が高い)に保存し、おそらくTextView(通常は静的なままです)の状態を保存しません)"
マーク・M
そのため、テキストビューの状態を onSaveInstanceState に保存することを選択したり、テキストビューの状態を onCreate に復元することを選択したりできます。
2) ベスト プラクティスは、宣言した場合でも、「内部」の非ビュー インスタンス状態を保存することです。
android:configChanges= "orientation|keyboardHidden"
ドキュメントから:
「ただし、アプリケーションは常にシャットダウンして、以前の状態のままで再起動できる必要があります。アプリケーションの再起動を防ぐことができない他の構成変更があるためだけでなく、ユーザーが着信を受信したときなどのイベントを処理するためでもあります。電話してから、アプリケーションに戻ります。」
日本航空
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 はデフォルトでアクティビティを再起動します。これを変更するには、onConfigurationChanged()
メソッドをオーバーライドする必要があります。android:configChanges
また、マニフェスト ファイルに追加する必要があります。
詳しくはこちらをご覧ください。
私も使った
android:configChanges="orientation"
そしてそれはうまくいきませんでした。
しかし、その後、解決策を見つけました。
マニエストに次の行が正しく含まれているかどうかを確認します。
<uses-sdk android:minSdkVersion="11" android:targetSdkVersion="11" />
次のようなものを読み取らないことを確認してください
<uses-sdk android`:minSdkVersion="11" android:targetSdkVersion="15" />`
最初は2番目の方法でしたが、修正すると状態が保持されました。