カスタム 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
アダプターの実装に関するチュートリアルがたくさんあります。