4

ListView を含むアクティビティがあります。SimpleCursorAdapter を使用してリスト ビューにデータを入力します。アプリを実行すると、ListView を手動で下にスクロールできます (たとえば、10 番目の項目まで)。次に、携帯電話を回転させると、Activity が破棄されて再作成され、ListView が期待どおりに新しく作成されます。

しかし、携帯電話を回転させた後、再作成されたアクティビティは、ListView がまだ手動スクロール位置 (この例では 10 行目) にあることを示しています。私のコードが ListView.setSelection(int) を呼び出していないと確信しているので、 ListView のこの再配置の原因は何ですか?

これはかなり便利に思えるかもしれませんが、私が望むものではありません。それは ListViews の動作の一部ですか? もしそうなら、どうすればこの再配置を停止/上書きできますか?

4

3 に答える 3

4

トピックをもう少し読んでください....

ビューの状態は自動的に保存されます (ListView を含む)。これは、onSaveInstanceState() / onRestoreInstanceState() のデフォルトの実装によって処理されます。デバッガーを使用すると、savedInstanceState に ListView からのエントリが含まれていることがわかります。これが自動的に再配置されます。アクティビティでこれを停止するには、onSaveInstanceState() をオーバーライドするだけです。

于 2011-10-07T07:37:35.070 に答える
0

アクティビティの基本クラスとして ListActivity を使用しましたか? はいの場合、onRestoreInstanceState をオーバーライドする機能である可能性があります。単純なアクティビティから継承しようとします。

于 2011-10-06T20:31:40.030 に答える
0

ListViewEditText画面の回転後に同じ方法でその状態 (スクロール位置を含む) を復元します。たとえば、入力したテキストを保持するのと同じ理由で。これは、Android フレームワークの設計方法です。xml レイアウト ファイルで のandroid:saveEnabled="false"属性を設定することにより、この保存/復元動作を停止できます。または、同じ目的で のメソッドをListView呼び出すこともできます。setSaveEnabled(false)ListView

于 2015-09-06T17:27:27.793 に答える