108

私のアプリにはTextViewと がありEditTextます。どちらにもデータが含まれています。画面の向きが変わるとデータはそのままEditText残りますが、TextViewデータはクリアされます。

データを保持する方法を見つけるのを手伝ってくれる人TextViewもいますか?

4

9 に答える 9

229

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

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

ドキュメントからfreezesText:

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

于 2011-05-23T12:28:01.007 に答える
28

向きの変更に関するデータを保持するには、次の 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);
}
于 2011-03-03T10:52:43.923 に答える
6

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>
于 2011-03-03T12:31:09.440 に答える
6

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

「私の知る限り、Androidは変更が予想されるものの状態を保存するだけです。そのため、テキストをEditText(ユーザーが変更する可能性が高い)に保存し、おそらくTextView(通常は静的なままです)の状態を保存しません)"

マーク・M

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

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

android:configChanges= "orientation|keyboardHidden" 

ドキュメントから:

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

日本航空

于 2011-03-03T17:50:51.037 に答える
1

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

android:configChanges="orientation|keyboardHidden"

次のようになります。

    <activity android:name=".activity.LoginActivity"
              android:configChanges="orientation|keyboardHidden"
              android:label="@string/app_name">
    </activity>
于 2011-03-03T10:50:10.310 に答える
1

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

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

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

于 2018-04-05T21:04:45.443 に答える
-2

構成が変更されると、Android はデフォルトでアクティビティを再起動します。これを変更するには、onConfigurationChanged()メソッドをオーバーライドする必要があります。android:configChangesまた、マニフェスト ファイルに追加する必要があります。

詳しくはこちらをご覧ください

于 2011-03-03T10:49:39.353 に答える
-7

私も使った

android:configChanges="orientation"

そしてそれはうまくいきませんでした。

しかし、その後、解決策を見つけました。

マニエストに次の行が正しく含まれているかどうかを確認します。

<uses-sdk android:minSdkVersion="11" android:targetSdkVersion="11" />

次のようなものを読み取らないことを確認してください

<uses-sdk android`:minSdkVersion="11" android:targetSdkVersion="15" />`

最初は2番目の方法でしたが、修正すると状態が保持されました。

于 2012-07-13T20:31:28.720 に答える