単純な制約でリスト (List または ArrayList) をフィルター処理し、データをListViewに表示することが目標の場合、次のようにアダプターでFilterableインターフェイスを直接使用できます。
public class AdapterFilterable extends BaseAdapter implements Filterable {
@Override
public Filter getFilter() {
Filter filter = new Filter() {
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
if (results != null && results.values != null) {
_arrayList = (List<object>) results.values;
}
else {
_arrayList = ApplicationGlobal._dataManager.get_ArraylistFull();
}
notifyDataSetChanged();
}
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults results = new FilterResults();
List<YourObject> filteredList = new ArrayList<YourObject>();
//Do your filtering operation with the constraint String
//Return result for publishResults to use it
results.count = filteredList.size();
results.values = filteredList;
return results;
}
};
return filter;
}
フィルターを使用するには、リストを検索するときや、必要な制約でフィルターするときのように:
_yourAdapter.getFilter().filter(String yourConstraintString);
それ以外の場合は、複雑なデータをフィルター処理する場合は、For ループで単純にフィルター処理してから、notifyDataChanged();を実行できます。
それが役に立てば幸い