2

3 つのタブをホストする MainActivity とViewPagerそれぞれのクラス extends がありFragmentます。タブの 1 つに のListViewレイアウトがあり、listView 内の各項目のレイアウトは次のとおりです。

TextView, checkBox and imageview

この ListView には、 を拡張するカスタマイズされたアダプター クラスがありますBaseAdapter

私がやりたいことは、ListView のチェックボックスのチェック状態を保存することです。Fragment を拡張するクラスでメソッドをオーバーライドします。問題は、BaseAdapter を拡張するクラスonSaveInstanceStateのメソッドで checkBoxes が定義されていることです。getview()メソッド「onSaveInstanceState」でチェックボックスのチェック状態を保存するにはどうすればよいですか?

4

1 に答える 1

2

の目的を誤解している可能性があると思いますBaseAdapterBaseAdapter派生クラスは、データセットと、AdapterViewそのデータセットの情報を表示する (および/またはそれと対話する) 間のインターフェイスとして機能することを意図しています。

それを念頭に置いて、あなたがやっていることを達成する最も簡単な方法はboolean、データセットの一部として を使用してアイテムがチェックされているかどうかを追跡することだと思います. たとえば、データセットが の場合、メンバーをArrayList<SomeObjectYouMadeUp>に追加します。の実行中に設定し、の実行中に を視覚的にチェックする必要があるかどうかを判断するために使用します。booleanSomeObjectYouMadeUpCheckBoxOnCheckedChangeListenerCheckBoxgetView()

それにはコードを再考する必要があるかもしれませんが、私を信じてください。あなたが説明している方法でそれを行うことは可能ですが、簡単でも信頼できるものでもありません。here で説明されている方法AdapterViewを使用して、表示されている各ビューに個別にアクセスすることをお勧めしますが、これもお勧めしません。

最大の理由はonSaveInstanceState、画面の回転など、構成の変更中に最も一般的に発生することです。これは、同じビューを表示するというのはほぼ間違いなく間違っていることを意味します。縦方向に表示されるビューが 10 個あり、横方向に表示されるビューが 5 個あるとします。ユーザーが横向きに回転すると、どの 5 つが得られるでしょうか? 確かに知っていますか?Viewおそらく保持しなければならないいくつかの識別情報に対して、それぞれの新しいビューをチェックする必要があります。またonSaveInstanceState、ローテーション前に新しいビューの 1 つが表示されなかった場合はどうなるでしょうか?

質問のリストは続きます。チェック状態を残りのデータセットと一緒に保存し、Android に任せてください。

于 2015-01-29T15:03:05.800 に答える