1

私は最新の Android SDK を使用しておりListView、さまざまな植物のリストを表す my を でフィルタリングしたいと考えていCheckBoxesます。

私のリストには、さまざまな属性 (色、サイズ、食べやすさなど) を持つ 800 個のアイテムがありCheckBoxes、減法でリストをフィルタリングする必要があります。すべての属性に一致するリスト アイテム/ビューのみが表示されます。その他の行はすべて非表示になります (プログラムはwww.pilzsuchmaschine.deのフィルタリング システムのように機能するはずです)。

getView()カスタムを変更しようとしましたArrayAdapterが、それを適切に行う方法がわかりませんでした。誰にも解決策がありますか?

私はこれArrayAdapterとかなり同じです。

4

1 に答える 1

1

カスタム ArrayAdapter の getView() を変更しようとしましたが、それを適切に行う方法がわかりませんでした。誰にも解決策がありますか?

getView()メソッドでフィルタリングを行いません。最初OnCheckedChangeListenerにすべてのフィルターCheckBoxesを設定して、ステータスを監視します (それぞれにステータスを保持するための変数がCheckBoxes必要です)。booleanフィルターCheckBoxがチェックされている/チェックされていない場合、ステータス変数を更新してから、ListView. のフィルタリングはListView、手動または専用のメカニズム (Filterクラス) を使用する 2 つの方法で行うことができます。

手動で、ユーザーがチェックするCheckBoxと、フィルターのすべてのステータスを取得し、CheckBoxesそれらを植物のリストの各要素と照合します。すべてのCheckBoxesステータスに一致する要素は有効であり、新しいリストに追加する必要があります。これが完了したら、アダプターが新しく作成されたリストを指すようにし、 を呼び出しますnotifyDataSetChanged()。あなたはたくさんのアイテムを持っているので、私はこのアプローチには行きません。

適切な方法は、独自のアダプターとそのFilterメソッドを作成することです (この場合、アダプターはフィルターのステータスを保持しますCheckBoxes)。ユーザーがフィルターをチェックするCheckBoxと、アダプターのメソッドが呼び出され、対応するブール値のステータスが更新されます。また、アダプタでメソッドを呼び出し、getFilter()フィルタリングを行います: ((Filterable) adapter).getFilter().filter(null). Filterアダプターの実装に関するチュートリアルがたくさんあります。

于 2013-02-07T09:12:57.183 に答える