0
如何使用EditText在自定義ArrayList中實現Filter,我使用ArrayList將JSON數據解析爲ListView。如何過濾自定義ArrayList
我想允許用戶過濾使用人名或城市記錄的EditText
public class Persons {
private String name;
private String city;
.......
// getters and setters
}
PersonsAdapter.java:
public class PersonsAdapter extends BaseAdapter implements Filterable {
ArrayList<Persons> arrayList;
ArrayList<Persons> filteredItems;
LayoutInflater inflater;
int Resource;
ViewHolder holder;
Context context;
private ItemFilter mFilter = new ItemFilter();
public PersonsAdapter(Context context, int resource, ArrayList<Persons> arrayList) {
this.context = context;
this.inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
this.Resource = resource;
this.arrayList = arrayList;
this.filteredItems = arrayList;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
// convert view = design
View view = convertView;
if (view == null) {
holder = new ViewHolder();
view = inflater.inflate(Resource, null);
holder.textName = (TextView) view.findViewById(R.id.textName);
holder.textCity = (TextView) view.findViewById(R.id.textCity);
view.setTag(holder);
}
else
{
holder = (ViewHolder) view.getTag();
}
holder.textName.setText(arrayList.get(position).getName());
holder.textCity.setText(arrayList.get(position).getCity());
return view;
}
static class ViewHolder {
TextView textName;
TextView textCity;
}
public Filter getFilter() {
return mFilter;
}
private class ItemFilter extends Filter {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
constraint = constraint.toString().toLowerCase();
FilterResults result = new FilterResults();
filteredItems = new ArrayList<Persons>();
if (constraint != null && constraint.toString().length() > 0) {
for (int i = 0, l = arrayList.size(); i < l; i++) {
Persons person = arrayList.get(i);
// here check with your property
if (person.getName().toLowerCase().contains(constraint))
filteredItems.add(person);
}
result.count = filteredItems.size();
result.values = filteredItems;
} else {
synchronized (this) {
result.values = arrayList;
result.count = arrayList.size();
}
}
return result;
}
@SuppressWarnings("unchecked")
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
filteredItems = (ArrayList<Persons>) results.values;
notifyDataSetChanged();
}
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return arrayList.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return arrayList.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
}
我盡力了,請不要往下投這個時候...... – Sophie
你需要implrment [可篩選(http://paste.ofcode.org/U7kuLJRZzkMTMwfxd69QsH)接口。 –
「_I盡我所能_」您的代碼的哪個部分試圖「使用EditText在自定義ArrayList中實現Filter」? – csmckelvey