BaseAdapter使用Filter笔记

来源:互联网 发布:开淘宝店需要交费么 编辑:程序博客网 时间:2024/05/18 16:36
public class MyProductAdapter extends BaseAdapter implements Filterable {private Context mContext;private final List<Product> mList;private List<Product> mSearchList;private LayoutInflater inflater;public MyProductAdapter(Context context, List<Product> list) {this.mContext = context;this.mList = list;this.mSearchList = new ArrayList<>(mList);this.inflater = LayoutInflater.from(mContext);}/** * 搜索框被清空后调用此方法显示所有商品 */public void showAllProduct() {mSearchList = new ArrayList<>(mList);notifyDataSetChanged();}@Overridepublic int getCount() {return mSearchList.size();}@Overridepublic Object getItem(int position) {return mSearchList.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {ViewHolder holder = null;if(convertView == null) {convertView = inflater.inflate(R.layout.my_product_list_item, null);holder = new ViewHolder();holder.img = (ImageView) convertView.findViewById(R.id.img);holder.text = (TextView) convertView.findViewById(R.id.text);convertView.setTag(holder);} else {holder = (ViewHolder) convertView.getTag();}Product p = mSearchList.get(position);holder.img.setImageResource(R.drawable.ic_launcher);holder.text.setText(p.getName());return convertView;}private static final class ViewHolder {public ImageView img;public TextView text;}private Filter mFilter = new Filter() {@SuppressLint("DefaultLocale")@Overrideprotected FilterResults performFiltering(CharSequence constraint) {String str = constraint.toString().toLowerCase();FilterResults results = new FilterResults();List<Product> list = new ArrayList<Product>();for(Product p : mList) {if(p.getName().contains(str)) {list.add(p);}}results.values = list;results.count = list.size();return results;}@SuppressWarnings("unchecked")@Overrideprotected void publishResults(CharSequence constraint,FilterResults results) {mSearchList.clear();mSearchList.addAll((ArrayList<Product>)results.values);if (results.count > 0) {notifyDataSetChanged();} else {notifyDataSetInvalidated();}}};@Overridepublic Filter getFilter() {return mFilter;}}


在activity中EditText添加监听:

et_search.addTextChangedListener(new TextWatcher() {@Overridepublic void onTextChanged(CharSequence s, int start, int before, int count) {if(TextUtils.isEmpty(s)) {btn_clear.setVisibility(View.INVISIBLE);productAdapter.showAllProduct();} else {btn_clear.setVisibility(View.VISIBLE);productAdapter.getFilter().filter(s);}}@Overridepublic void beforeTextChanged(CharSequence s, int start, int count,int after) {}@Overridepublic void afterTextChanged(Editable s) {}});


继承Filterable以后,在activity中监听ListView中item按下事件,不能再用List<Product> mList,而应该使用getItem(int position)方法获取单个对象。

0 0
原创粉丝点击