使用EditText搜索listview里面的内容,实现Listview跟随变动的情况

1.布局的XML文件里面添加EditText控件(省略)控件id=mSearch ListView的id=admin_lv;

2.一、获取ListView展示的数据(通过适配器获取)

 二、这个是我要说的搜索功能    

mSearch.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {

}

@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
      
    //这个和之前的适配器不同,是搜索完成后listview
madminAdapter = new AdminManagerAdapter(AdminActivity.this, adminList);
//搜索完获取的数据
madminAdapter.setDataSource(adminList);
admin_lv.setAdapter(madminAdapter);
madminAdapter.getFilter().filter(s);

if (s.length() > 0) {
admin_lv.setVisibility(View.VISIBLE);
} else {
admin_lv.setVisibility(View.GONE);
}
}

@Override
public void afterTextChanged(Editable s) {

}
});

3.搜索适配的要实现:Filterable这个接口
代码如下:(其他适配的方法和之前的BaseAdapter是一样的)

//满足过滤条件的数据
private List<AdminMenager> mOriginalValues;
//过滤时候的总数据 这个是不变的数据
private List<AdminMenager> adminList;
//适配器的adpater
private List<AdminMenager> adapterList;

//初始化数据

public AdminManagerAdapter(Context context,List<AdminMenager> adminList) {
    super(context);
this.adminList=adminList;

mOriginalValues=new ArrayList<>();
adapterList=new ArrayList<>();
    
  
adapterList.addAll(adminList);

}
@Override
public Filter getFilter() {
if (myFilter==null){
myFilter=new MyFilter();
}
return myFilter;
}


//过滤数据
class MyFilter extends Filter {

//执行过滤
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults results = new FilterResults();
if (constraint == null || constraint.length() == 0) {
mOriginalValues.clear();
results.values = adminList;

} else {
mOriginalValues.clear();
for (Iterator<AdminMenager> iterator = adminList.iterator(); iterator
.hasNext();) {
AdminMenager name = iterator.next();
if (name.user_name.contains(constraint)) {
mOriginalValues.add(name);
}
}
results.values = mOriginalValues;

}
Log.d("adapter","???result"+results);
return results;

}

//得到过滤结果
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
adapterList = (ArrayList<AdminMenager>) results.values;

if (results.count > 0) {
notifyDataSetChanged();


} else {
notifyDataSetInvalidated();
}
}
}


注:此方法只用于搜索ListView展示的信息
祝大家好运连连

转载于:https://www.cnblogs.com/zhaohaixia/p/5783785.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值