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

Android 如何在适配器上应用多个筛选器?,android,android-listview,android-adapter,Android,Android Listview,Android Adapter,我得到了一个列表视图和一个搜索字段,该字段调用适配器的getFilter().filter(关键字)func。 它工作得很好,但我想添加一个其他过滤器,用于搜索ListView对象的不同标记 所以我需要两个过滤器为我的适配器,什么是最好的解决方案呢 谢谢,我想您自己实现了这个过滤器。由于无法获得两个过滤器,因此过滤器中可以有一个字段,用于定义应应用哪种类型的过滤器(可以在过滤器中使用多个过滤器) 在使用过滤器之前,将过滤器的字段设置为所需的值 或: 使用关键字选择要应用的筛选器。在关键字的开头添

我得到了一个列表视图和一个搜索字段,该字段调用适配器的getFilter().filter(关键字)func。 它工作得很好,但我想添加一个其他过滤器,用于搜索ListView对象的不同标记

所以我需要两个过滤器为我的适配器,什么是最好的解决方案呢


谢谢,

我想您自己实现了这个过滤器。由于无法获得两个过滤器,因此过滤器中可以有一个字段,用于定义应应用哪种类型的过滤器(可以在过滤器中使用多个过滤器)

在使用过滤器之前,将过滤器的字段设置为所需的值

或:


使用关键字选择要应用的筛选器。在关键字的开头添加一些字符,这些字符定义要应用的筛选器。使用
String.beginsWith()
可以检查必须应用哪种类型的筛选。这必须在过滤器本身中完成。getFilter.filter(关键字)的调用者必须知道必须在字符串前面添加哪些字符。

我想是您自己实现了这个过滤器。由于无法获得两个过滤器,因此过滤器中可以有一个字段,用于定义应应用哪种类型的过滤器(可以在过滤器中使用多个过滤器)

在使用过滤器之前,将过滤器的字段设置为所需的值

或:


使用关键字选择要应用的筛选器。在关键字的开头添加一些字符,这些字符定义要应用的筛选器。使用
String.beginsWith()
可以检查必须应用哪种类型的筛选。这必须在过滤器本身中完成。getFilter.filter(关键字)的调用方必须知道必须在字符串前面添加哪些字符。

在Listview中应用多个筛选器,并在Listview中使用多重排序,请尝试以下链接:


在Listview中应用多重筛选,并在Listview中使用多重排序,请尝试以下链接:


我也有类似的需求,我为自己写过信。该过滤器与AND运算符相结合。让它尽可能简单。不是说它是完美的,但它对我有用。你可以根据需要改变

项目模型

公共类ItemModel{
公共int ID;
公共评级;
公共浮动平均值;
公共字符串名称;
公共字符串shortDesc;
公共布尔读取;
}
和parser.java

/**
*这个类被设计成可以简单地解析表单的过滤器
*“对象字段名称:变量类型:运算符:值”
*
*“ID:int:>:20”;“名称:字符串:=:20”
*在哪里表示和,但此处不分析。
*如果您需要不同的逻辑,请使用结果
*
*由“;”分隔的多个过滤器
*/
公共类解析器{
私有静态最终字符串TAG=“Parser”;
公共静态布尔值IsPassingDefiler(字符串筛选器、字符串字段、字符串值){
字符串[]mGroups=parseMainGroups(筛选器);
for(字符串管理组:管理组){
Log.e(标签“在主组上工作”+mGroup);
String[]子命令=parseSubCommand(mGroup);
if(field.equals(子命令[0])){
if(!processCommand(子命令,val)){
返回false;
}
}
}
返回true;
}
/**
*假设数据都是由`指定的,则解析该数据`
*/
公共静态字符串[]parseMainGroups(CharSequence命令){
字符串缓冲区=commands.toString();
字符串部分[]=buffer.split(“;”);
返回部件;
}
公共静态字符串[]解析子命令(字符串子命令){
//删除双引号。
字符串缓冲区=removeDoubleQuotes(subCommand.toString());
字符串部分[]=buffer.split(“:”);
返回部件;
}
公共静态字符串RemovedDoubleQuotes(字符串quotedString){
如果((quotedString.charAt(0)='\'')和(&(quotedString.charAt(quotedString.length()-1)='\'')){
返回quotedString.substring(1,quotedString.length()-1);
}否则{
Log.e(标记,quotedString+“不包含在双引号中!\n返回的空字符串!!!”;
返回“”;
}
}
公共静态布尔processCommand(String[]子命令,String val){
开关(子命令[1]){
案例“int”:
Log.e(“TAG”,“tint Filer”);
return intStatement(子命令,val);
案例“浮动”:
Log.e(“TAG”,“\t文件管理器”);
返回floatStatement(子命令,val);
大小写“字符串”:
Log.e(“标记”,“字符串文件管理器”);
返回stringStatement(子命令,val);
违约:
返回false;
}
}
/**
*使用给定的Int值评估Int语句的正确性
*/
公共静态布尔语句(String[]子命令,String cVal){
String operString=子命令[2];
国际竞争力;
int-val;
试一试{
iVal=Integer.parseInt(子命令[3]);
val=Integer.parseInt(cVal);
}捕获(数字格式){
返回false;
}
开关(操作字符串){
案例“=”:
返回val==iVal;
案例“”:
返回val>iVal;
案例“=”:
返回val>=iVal;
案例“!=”:
返回val!=iVal;
案例“s”:
//数字搜索为字符串。我们从已有的字符串中查找字符串
返回cVal.contains(子命令[3]);
违约:
Log.e(“解析器”,“无效整数操作”);
返回false;
}
}
公共静态布尔浮点语句(String[]子命令,String cVal){
String operString=子命令[2];
浮雕;
浮动增值税;
试一试{