This is my custom adapter inherited from BaseAdapter:
public class LocationItemAdapter extends BaseAdapter implements Filterable { private Activity context; private String[] names; private Bitmap[] iconBitmaps; private String[] categories; private String[] ratings; private boolean notifyChanged = true; public LocationItemAdapter(Activity activityContext, String[] names, Bitmap[] iconBitmaps, String[] categories, String[] ratings) { super(); this.context = activityContext; this.names = names; this.iconBitmaps = iconBitmaps; this.categories = categories; this.ratings = ratings; } public int getCount() { return names.length; } public Object getItem(int position) { return position; } public long getItemId(int position) { return position; } public static class ItemViewHolder { TextView nameTextView; TextView categoryTextView; TextView ratingTextView; ImageView mapIconImageView; } public View getView(int position, View convertView, ViewGroup parent) { ItemViewHolder holder; LayoutInflater inflater = context.getLayoutInflater(); if (convertView == null) { convertView = inflater.inflate(R.layout.location_item, null); holder = new ItemViewHolder(); holder.nameTextView = (TextView) convertView.findViewById(R.id.location_item_xml_textview_name); holder.categoryTextView = (TextView) convertView.findViewById(R.id.location_item_xml_textview_category); holder.ratingTextView = (TextView) convertView.findViewById(R.id.location_item_xml_textview_rating); holder.mapIconImageView = (ImageView) convertView.findViewById(R.id.location_item_xml_imageview_location_icon); convertView.setTag(holder); } else { holder = (ItemViewHolder) convertView.getTag(); } holder.nameTextView.setText(names[position]); holder.categoryTextView.setText(categories[position]); holder.ratingTextView.setText(ratings[position]); holder.mapIconImageView.setImageBitmap(iconBitmaps[position]); return convertView; } public void notifyDataSetChanged() { super.notifyDataSetChanged(); notifyChanged = true; } public android.widget.Filter getFilter() { return new android.widget.Filter() { @SuppressWarnings("unchecked") @Override protected void publishResults(CharSequence constraint, FilterResults results) { } @Override protected FilterResults performFiltering(CharSequence constraint) { FilterResults results = new FilterResults(); if (constraint != null && constraint.toString() > 0) { } else { } results.values = filteredResults; return results; } }; } }
I searched and found that there are two functions that I need to implement:
protected void publishResults(CharSequence constraint, FilterResults results)protected FilterResults performFiltering(CharSequence constraint)
A filter constraint is a string array of names, and I think performFiltering will do a search based on the text "constraint". What confuses me is that the type of results.value is equal to object . So, after I searched by name , what data type should be assigned to results.values ? And what does publishResults do? Can someone give me an example on these two functions? Thanks in advance,
android filter listview
Chan
source share