【问题标题】:How to apply multiple Filters on an Adapter Or Listview?如何在适配器或列表视图上应用多个过滤器?
【发布时间】:2016-09-30 09:35:51
【问题描述】:

我有带有总线信息列表的 ListView,我想在 Adapter 或 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) {}

}

下面是我的屏幕视图

当我在文本视图上搜索时,它的搜索非常好,但我也想用区域和人口过滤 ListView。

【问题讨论】:

  • 你需要做更多的研究......尝试一些东西,编写一些代码......然后如果你的代码有问题,最终回到这里......因为现在你的问题是:免费为我写 xxx 之类的应用
  • 对不起 Selvin,我被问到了错误的问题,这种方法我在国家搜索中遵循了这种工作正常,但我想为区域过滤器和人口过滤器实现相同的功能

标签: android listview adaptor listview-filter


【解决方案1】:

在 Listview 中应用多重过滤器并在 ListView 中使用多重排序,试试这个链接:

https://github.com/apurv3039/filter_listview/tree/master

【讨论】:

    【解决方案2】:

    您可以在 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();
        }
    }
    

    【讨论】:

      【解决方案3】:
         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;}
      }
      

      【讨论】:

      • 感谢您对社区的贡献。这可能是一个正确的答案,但对您的代码提供额外的解释会很有用,以便开发人员能够理解您的推理。这在用其他答案回答问题时特别有用,因为它可以帮助读者理解你的方法的主要区别。您介意用更多详细信息更新您的评论吗?
      猜你喜欢
      • 2012-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-18
      • 2019-07-21
      • 1970-01-01
      • 2016-06-19
      相关资源
      最近更新 更多