Android 如何在适配器或Listview上应用多个筛选器?

Android 如何在适配器或Listview上应用多个筛选器?,android,listview,adaptor,listview-filter,Android,Listview,Adaptor,Listview Filter,我有一个包含总线信息列表的ListView,我想在适配器上或ListView中应用多重过滤器,我已经在ListView上完成了实时搜索过滤器 以下是我的活动: public class FilterListActivity extends Activity implements TextWatcher { private static List<Country> countries = Storage.getItems(); private EditText edi

我有一个包含总线信息列表的ListView,我想在适配器上或ListView中应用多重过滤器,我已经在ListView上完成了实时搜索过滤器

以下是我的活动:

public class FilterListActivity extends Activity implements TextWatcher {

    private static List<Country> countries = Storage.getItems();
    private EditText editTextFilter;
    private ListView listViewCountries;
    private CountryListAdapter adapter;


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        adapter = new CountryListAdapter(this, countries);

        editTextFilter = (EditText)findViewById(R.id.editTextFilter);
        editTextFilter.addTextChangedListener(this);

        listViewCountries = (ListView)findViewById(R.id.listViewCountries);
        listViewCountries.setAdapter(adapter);
    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        adapter.getFilter().filter(s);
    }

    @Override
    public void afterTextChanged(Editable s) {}

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {}

}
公共类FilterListActivity扩展活动实现TextWatcher{
私有静态列表国家=Storage.getItems();
私有编辑文本编辑过滤器;
私有ListView listViewCountries;
专用适配器;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
adapter=新的CountryListAdapter(此,国家/地区);
editTextFilter=(EditText)findViewById(R.id.editTextFilter);
editTextFilter.addTextChangedListener(此);
listViewCountries=(ListView)findViewById(R.id.listViewCountries);
listViewCountries.setAdapter(适配器);
}
@凌驾
public void onTextChanged(字符序列、int start、int before、int count){
adapter.getFilter().filter;
}
@凌驾
公共无效后文本更改(可编辑的s){}
@凌驾
public void beforeTextChanged(字符序列s、int start、int count、int after){}
}
下面是我的屏幕视图


当我在文本视图上搜索时,它的搜索效果非常好,但我想用区域和填充来过滤ListView。

在ListView中应用多个过滤器,并在ListView中使用多重排序,请尝试以下链接:


您可以在performFiltering(CharSequence constraint)方法中添加条件,如下所示

ListAdapter implements Filterable{
 @Override
public Filter getFilter() {
    if (valueFilter == null) {
        valueFilter = new ValueFilter();
    }
    return valueFilter;
}
private class ValueFilter extends Filter {
    @Override
    protected FilterResults performFiltering(CharSequence constraint) {
        FilterResults results = new FilterResults();

        if (constraint != null && constraint.length() > 0) {
            List<DrugsListPojo> filterList = new ArrayList<>();
            for (int i = 0; i < mdataListFilterList.size(); i++) {
                if ((mdataListFilterList.get(i).getName().toUpperCase()).contains(constraint.toString().toUpperCase())) {
                    filterList.add(mdataListFilterList.get(i));
                }else  if ((mdataListFilterList.get(i).getDrugTypeName().toUpperCase()).contains(constraint.toString().toUpperCase())) {
                    filterList.add(mdataListFilterList.get(i));
                }
            }
            results.count = filterList.size();
            results.values = filterList;
        } else {
            results.count = mdataListFilterList.size();
            results.values = mdataListFilterList;
        }
        return results;

    }

    @Override
    protected void publishResults(CharSequence constraint,
                                  FilterResults results) {
        dataList = (List<DrugsListPojo>) results.values;
        notifyDataSetChanged();
    }
}
ListAdapter实现可过滤{
@凌驾
公共过滤器getFilter(){
if(valueFilter==null){
valueFilter=新的valueFilter();
}
返回值过滤器;
}
私有类ValueFilter扩展了筛选器{
@凌驾
受保护的筛选器结果性能筛选(CharSequence约束){
FilterResults results=新的FilterResults();
if(constraint!=null&&constraint.length()>0){
List filterList=new ArrayList();
对于(int i=0;i
你需要做更多的研究…尝试一些东西,编写一些代码…如果你的代码有问题,最终回到这里…现在你的问题是:为我为freeSorry Selvin编写类似xxx的应用程序,我被问到的问题是错误的,这种方法我遵循了这个方法,在国家搜索中效果很好,但我想实现nt区域过滤器和人口过滤器的相同功能感谢您对社区的贡献。这可能是一个正确的答案,但提供额外的代码解释,以便开发人员理解您的推理是非常有用的。这在用其他答案回答问题时尤其有用,因为它会有所帮助读者理解你的方法的主要区别。你介意用更多的细节更新你的评论吗?
   etSearchbox=(EditText)findViewById(R.id.etSearchbox);
    etSearchbox.addTextChangedListener(new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
            // TODO Auto-generated method stub
           // Dar_List.this.adapter.getFilter().filter(arg0);
            List<DarParClass> Dar_List_New= new ArrayList();
            for (DarParClass var : Dar_List)
            {
                if (var.Date1.contains(arg0)){//you can add multiple Filters here with '||'
                    Dar_List_New.add(var);
                }
            }
            adapter = new Dar_List_ListViewAdapter(Dar_List_New, getBaseContext());
            listView.setAdapter(adapter);
        }

        @Override
        public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
                                      int arg3) {
            // TODO Auto-generated method stub

        }

        @Override
        public void afterTextChanged(Editable arg0) {
            // TODO Auto-generated method stub

        }
    });
public class DarParClass {
  String KodD,Kodmh,Ham,Rate,RateM,Price1,Distin1,Pricesum1,Date1,Refe1_n;

  public DarParClass(String KodD, String Kodmh, String Ham, String Rate, String RateM, String Price1, String Distin1, String Pricesum1, String Date1, String Refe1_n) {
    this.KodD = KodD;

    this.Kodmh = Kodmh;
    this.Ham = Ham;
    this.Rate = Rate;
    this.RateM = RateM;
    this.Price1 = Price1;
    this.Distin1 = Distin1;
    this.Pricesum1 = Pricesum1;
    this.Date1 = Date1;
    this.Refe1_n = Refe1_n;
  }
  public String getKodD() {return KodD;}

  public String getKodmh() {return Kodmh;}
  public String getHam() {return Ham;}
  public String getRate() {return Rate;}
  public String getRateM() {return RateM;}
  public String getPrice1() {return Price1;}
  public String getDistin1() {return Distin1;}
  public String getPricesum1() {return Pricesum1;}
  public String getDate1() {return Date1;}
  public String getRefe1_n() {return Refe1_n;}
}