リストとその下にある EditText を含むアクティビティがあります。Edit Text は文字列を入力するためのもので、リストがその文字列で構成されるようにします。BaseAdapter に基づく ListView には、タイプ F の要素が含まれています。
public class lstAdaptF extends BaseAdapter implements Filterable {
Context ctx;
LayoutInflater lInflater;
ArrayList<F> objectsF;
ArrayList<F> origobjectsF;
...
private Filter FirmaBBFilter;
lstAdaptF(Context context, ArrayList<F> f) {
ctx = context;
objectsF = f;
origobjectsF = f;
lInflater = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
...
@Override
public Filter getFilter() {
if (FFilter == null)
FFilter = new FFilter();
return FFilter;
}
...
private class FFilter extends Filter {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults results = new FilterResults();
if (constraint == null || constraint.length() == 0) {
//get all inital list
results.values = origobjectsF;
results.count = origobjectsF.size();
Log.d("lstAdaptF","empty filter");
} else {
// We perform filtering operation
ArrayList<F> nF = new ArrayList<F>();
for (F p : origobjectsF) {
if (p.getName().toUpperCase().contains(constraint.toString().toUpperCase())){
nF.add(p);
}
}
results.values = nF;
results.count = nF.size();
}
return results;
}
リストには文字列が含まれているなど、すべてが正常に機能します
Awork
Aworth
winter
'w' を入力します: Awork、Aworth、winter
「を」と入力します: Awork、Aworth
'woo' と入力します: Awork, Aworth - リストが空であるはずなのに、まだ同じです! どうすればこの状況を管理できますか? ありがとうございました。
更新:
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
// Now we have to inform the adapter about the new list filtered
if (results.count == 0)
notifyDataSetInvalidated();
else {
objectsF = (ArrayList<F>) results.values;
notifyDataSetChanged();
}
}
UPD2:
@Override
public Object getItem(int position) {
return objectsF.get(position);
}
@Override
public int getCount() {
return objectsF.size();
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = convertView;
FHolder holder = new FHolder();
if (view == null) {
view = lInflater.inflate(R.layout.itemf, parent, false);
TextView tvAF = (TextView) view.findViewById(R.id.tvA);
...
holder.tvAF = tvAF;
...
view.setTag(holder);
}
else
holder = (FHolder) view.getTag();
F p = getF(position);
holder.tvAF.setText(p.a + "");
..
return view;
}