用edittext做自定义listview搜索过滤器

来源:互联网 发布:机械臂示教算法 编辑:程序博客网 时间:2024/04/30 18:33
package Adapters;


import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.zip.Inflater;


import com.example.qduniversityjobhelper.R;


import Beans.JobtitleBean;


import android.content.Context;
import android.graphics.Color;
import android.view.LayoutInflater;


import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Filter;
import android.widget.Filterable;
import android.widget.TextView;


public class JobtitleAdapter extends BaseAdapter implements Filterable {
private List<JobtitleBean> list;
private LayoutInflater mInflater;
private ArrayList<JobtitleBean> mOriginalValues;


public JobtitleAdapter(List<JobtitleBean> list, Context context) {
this.list = list;
this.mInflater = LayoutInflater.from(context);


}


@Override
public int getCount() {
// TODO Auto-generated method stub
return list.size();
}


@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return list.get(arg0);
}


@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return arg0;
}


@Override
public View getView(int arg0, View convertView, ViewGroup arg2) {
// TODO Auto-generated method stub
ViewHolder holder;


if (convertView == null) {
convertView = mInflater.inflate(R.layout.jobtitle_item, null);
holder = new ViewHolder();
holder.textView1 = (TextView) convertView
.findViewById(R.id.textView1);
holder.textView2 = (TextView) convertView
.findViewById(R.id.textView2);


holder.textView3 = (TextView) convertView
.findViewById(R.id.textView3);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.textView1.setText(list.get(arg0).getTitle());
holder.textView2.setText(list.get(arg0).getDate());
holder.textView1.setTextColor(Color.BLACK);
holder.textView2.setTextColor(Color.BLACK);
holder.textView3.setTextColor(Color.BLACK);
return convertView;
}


static class ViewHolder {
public TextView textView1;
public TextView textView2;
public TextView textView3;
}


@Override
public android.widget.Filter getFilter() {
// TODO Auto-generated method stub
return new MyFilter();
}


class MyFilter extends Filter {


@Override
protected FilterResults performFiltering(CharSequence prefix) {
// 持有过滤操作完成之后的数据。该数据包括过滤操作之后的数据的值以及数量。 count:数量 values包含过滤操作之后的数据的值
FilterResults results = new FilterResults();


if (mOriginalValues == null) {
synchronized (this) {
// 将list的用户 集合转换给这个原始数据的ArrayList
mOriginalValues = new ArrayList<JobtitleBean>(list);  
}
}
if (prefix == null || prefix.length() == 0) {
synchronized (this) {
ArrayList<JobtitleBean> list1 = new ArrayList<JobtitleBean>(  
                           mOriginalValues);  
                   results.values = list1;  
                   results.count = list1.size();  
}
} else {
// 做正式的筛选
String prefixString = prefix.toString().toLowerCase();


// 声明一个临时的集合对象 将原始数据赋给这个临时变量
final List<JobtitleBean> values = mOriginalValues;


final int count = values.size();


// 新的集合对象
final List<JobtitleBean> newValues = new ArrayList<JobtitleBean>(
count);


for (int i = 0; i < count; i++) {
// 如果姓名的前缀相符或者电话相符就添加到新的集合
final JobtitleBean value = (JobtitleBean) values.get(i);


if ( value.getTitle().contains(prefixString)) {


newValues.add(value);
}
}
// 然后将这个新的集合数据赋给FilterResults对象
results.values = newValues;
results.count = newValues.size();
}


return results;
}


@Override
protected void publishResults(CharSequence constraint,
FilterResults results) {
// 重新将与适配器相关联的List重赋值一下
list = (List<JobtitleBean>) results.values;


if (results.count > 0) {
notifyDataSetChanged();
} else {
notifyDataSetInvalidated();
}
}


}

}

searchView.addTextChangedListener(new TextWatcher() {  
 
            @Override  
            public void onTextChanged(CharSequence s, int start, int before,  
                    int count) {  
                adapter.getFilter().filter(searchView.getText().toString());  
  
            }  
  
            @Override  
            public void beforeTextChanged(CharSequence s, int start, int count,  
                    int after) {  
                // TODO Auto-generated method stub  
  
            }  
  
            @Override  
            public void afterTextChanged(Editable s) {  
                // TODO Auto-generated method stub  
  
            }  
        });  

0 0