Android 如何在适配器或Listview上应用多个筛选器?
我有一个包含总线信息列表的ListView,我想在适配器上或ListView中应用多重过滤器,我已经在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
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;}
}