web-dev-qa-db-ja.com

画面の回転後にTextViewの状態を復元しますか?

私のアプリにはTextViewEditTextがあります。両方にデータがあります。画面の向きが変わると、EditTextのデータは残りますが、TextViewデータは消去されます。

誰かがTextViewにデータを保持する方法を見つけるのを手伝ってもらえますか?

102
kAnNaN

TextViewにその状態を保存するように強制する場合は、 freezesText 属性を追加する必要があります。

<TextView 
     ... 
     Android:freezesText="true" />

freezesText のドキュメントから:

設定されている場合、テキストビューには、現在のカーソル位置などのメタデータに加えて、凍結されたつららの中に現在の完全なテキストが含まれます。デフォルトでは無効になっています。テキストビューのコンテンツがコンテンツプロバイダーなどの永続的な場所に保存されていない場合に役立ちます。

218
inazaruk

方向の変更でデータを保持するには、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);
}
28
Eric Nordvik

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>
6
Kevin

1)IDを持つすべてのビューが状態を保存するわけではありません。 Androidユーザーが状態を変更できるIDを持つウィジェットは、ソフトキルで状態を保存するように見えます。したがって、EditTextはその状態を保存しますが、TextViewはその状態を保存しませんソフトキル。

「AFAIK、Androidは、変更が予想されるものの状態を保存するだけです。そのため、ユーザーが変更する可能性のあるEditTextにテキストを保存します。 TextViewの状態(通常は静的なままです)」

マークM

したがって、onSaveInstanceStateでテキストビューの状態を保存することを選択でき、onCreateでテキストビューの状態を復元することを選択できます。

2)ベストプラクティスは、宣言した場合でも「内部」非ビューインスタンス状態を保存することです

Android:configChanges= "orientation|keyboardHidden" 

ドキュメントから:

「ただし、アプリケーションは常に以前の状態をそのままシャットダウンして再起動できる必要があります。アプリケーションの再起動を防ぐことができない他の構成変更があるだけでなく、ユーザーが着信を受信したときなどのイベントを処理するためにも、電話してからアプリケーションに戻ります。」

JAL

6
JAL

AndroidManifest.xmlでアクティビティを変更して、アクティビティ/アクティビティにこれを追加することで、向きの変更動作をオーバーライドします。

Android:configChanges="orientation|keyboardHidden"

次のようになります。

    <activity Android:name=".activity.LoginActivity"
              Android:configChanges="orientation|keyboardHidden"
              Android:label="@string/app_name">
    </activity>
1
Joakim Berglund

これらをAndroidManifest.xmlに追加します
Activity_Nameの代わりにアクティビティ名を入力します

<activity Android:name="Activity_Name"
        Android:screenOrientation="sensor"
        ...
        Android:configChanges="orientation|keyboardHidden|screenSize">

これは、TextFieldを変更する値でも機能します。

0
Rahul Krishna

追加するだけ

Android:configChanges="orientation|screenSize"

androidManifest.xmlのアクティビティに追加します。

0
farhad.kargaran