12

ListView に提案を表示する必要があるアプリを開発しています。向きが変更されたときに、そのリストを非表示にしたいです。しかし、とにかく画面に表示されます。私はこれを試しました:1)リストアダプターを取得してクリアします。2)向きが変更される前に可視性をGONEに設定します(ただし、onCreate後に再び可視になります)3)onCreateで可視性をGONEに設定しますが、リストはまだ画面に表示されます(リストビューを再度初期化し、空のように見えますが、画面上のリストはそうではありません)。では、どうすればリストを取り除くことができますか?

4

3 に答える 3

24

アクティビティ内のすべてのビューに影響を与えるandroid:configChangesのようなグローバルなものを使用する代わりに、メソッドsetSaveEnabled(boolean) または同等の xml 属性 android:saveEnabledを使用するのは どうですか?

このビューの状態の保存を有効にするかどうか (つまり、その onSaveInstanceState() メソッドを呼び出すかどうか) を制御します。

false に設定すると、状態が保存されないため、方向を変更するときに常にデフォルトの状態に戻る必要があります。

たとえば、これをレイアウト ファイルに入れることができます。

<ListView
    ....
    android:visibility="invisible"
    android:saveEnabled="false">
</ListView>

次に、入力を開始するときに可視性を VISIBLE に設定します。または、可視性とメソッドsetSaveEnabledを onCreate メソッドに配置したい場合。

シンプルな ListView と、可視性を true に変更する Button を試しました。回転すると、ListView が非表示になりました (デフォルト状態)

また、次の点にも注意してください。

このフラグは、このビューの保存のみを無効にできます。子ビューには状態が保存されている場合があります。

そのため、onStop() または任意の方法でリストをクリアする必要がありますが、そうしない場合でも、ListView は回転時に非表示になります。

ソース:

于 2013-04-24T15:24:31.103 に答える
1
@Override
protected void onSaveInstanceState(Bundle outState) {
}

この関数をアクティビティにオーバーライドし、「スーパー」メソッドを呼び出さないでください。

またはマニフェストに方向を指定します。

<activity
    android:name="com.blabla"
    android:configChanges="keyboardHidden|orientation|screenSize"
    android:screenOrientation="portrait" >
</activity>
于 2013-04-24T12:44:58.347 に答える