public class UserAdapter extends BaseAdapter implements Filterable { private MyFilter myFilter; private List userInfos; private Context context; private ArrayList mOriginalValues; private final Object mLock = newObject();public UserAdapter(Context context, List userInfos) { this.context = context; this.userInfos =userInfos; }
@Overridepublic int getCount() { //TODO Auto-generated method stub return userInfos.size(); }
@Overridepublic Object getItem(int arg0) { //TODO Auto-generated method stub return userInfos.get(arg0); }
@Overridepublic long getItemId(int position) { //TODO Auto-generated method stub return position; }
@Overridepublic View getView(intposition, View convertView, ViewGroup parent) {
View view=convertView;
ViewHolder holder;if (view == null) { view = LayoutInflater.from(context).inflate( R.layout.adapter_mohusearch, null); holder = new ViewHolder(); holder.tv_nick = (TextView) view .findViewById(R.id.adapter_mohutext); view.setTag(holder); } else { holder =(ViewHolder) view.getTag(); }
holder.tv_nick.setText(userInfos.get(position).getUsername());returnview; }static classViewHolder {
TextView tv_nick; TextView tv_mobile; }
@Overridepublic Filter getFilter() { if (myFilter == null) { myFilter = new MyFilter(); } returnmyFilter; }class MyFilter extendsFilter {
@Overrideprotected FilterResults performFiltering(CharSequence prefix) { //持有过滤操作完成之后的数据。该数据包括过滤操作之后的数据的值以及数量。 count:数量 values包含过滤操作之后的数据的值 FilterResults results = new FilterResults();
if (mOriginalValues == null) { synchronized (mLock) { //将list的用户 集合转换给这个原始数据的ArrayList mOriginalValues = new ArrayList(userInfos); } } if (prefix == null || prefix.length() == 0) { synchronized (mLock) { ArrayList list = new ArrayList( mOriginalValues); results.values = list; results.count = list.size(); } } else {//做正式的筛选 String prefixString = prefix.toString().toLowerCase();//声明一个临时的集合对象 将原始数据赋给这个临时变量 final ArrayList values = mOriginalValues;
final int count =values.size();//新的集合对象 final ArrayList newValues = new ArrayList( count);
for (int i = 0; i < count; i++) { //如果姓名的前缀相符或者电话相符就添加到新的集合 final UserInfo value = (UserInfo) values.get(i);
if (Helper.getPinYinHeadChar(value.getUsername()) .startsWith(prefixString) ||value.getUsername().startsWith(prefixString)) {
newValues.add(value); } }//然后将这个新的集合数据赋给FilterResults对象 results.values = newValues; results.count = newValues.size(); }
returnresults; }
@SuppressWarnings("unchecked") @Override protected void publishResults(CharSequence constraint, FilterResults results) { //重新将与适配器相关联的List重赋值一下 userInfos = (List) results.values; AppContext.mListMH=(List) results.values; if (results.count > 0) { notifyDataSetChanged(); } else { notifyDataSetInvalidated(); } }
}