我整天都在研究这个问题而且我没有得到任何结果!!
我一直在搜索“多个过滤器”等帖子以及更多内容,没有什么是好的。
我有一个 SimpleAdapter 和一个填充的ListView。现在我根据单词进行自定义搜索。我将这些词与空格分开。例如:
依云,我的数据是:
猫喜欢狗
狗喜欢老鼠
老鼠喜欢奶酪
猫吃奶酪
如果我过滤'cat',我会有下一个清单:
猫喜欢狗
猫吃奶酪
如果我再次使用'奶酪'过滤,我会得到:
猫吃奶酪
但相反,我得到了这个:
老鼠喜欢奶酪
猫吃奶酪
所以,我只得到了最后的过滤器。
这是我的代码:
public void onTextChanged(CharSequence cs, int arg1, int arg2,int arg3) {
String[] separated = (cs).split(" +");
// With conditions not metioned here, I'm supposed to enter only words and spaces like the examples
for (int i2 = 0; i2 < separated.length ; i2++) {
adapter3.getFilter().filter(separated[i2]);
adapter3.notifyDataSetChanged();
}
}
提前致谢!!!
修改
我有自定义适配器。我可以看到我的结果,但我无法设置我的适配器,不知道为什么。
因此,当我在另一个函数上创建setAdapter(adapter)
时,它不会显示给我。
这是我的适配器:
public class Adaptador extends SimpleAdapter implements Filterable {
public Adaptador(Context context, ArrayList<HashMap<String, String>> data,
int resource, String[] from, int[] to) {
super(context, data, resource, from, to);
// TODO Auto-generated constructor stub
}
@Override
public Filter getFilter() {
filtrodoble fil = new filtrodoble();
return fil;
}
public class filtrodoble extends Filter{
@Override
protected FilterResults performFiltering(CharSequence constraint) {
// TODO Auto-generated method stub
FilterResults Result = new FilterResults();
// if constraint is empty return the original names
ArrayList<String> Filtered_Names = new ArrayList<String>();
Filtered_Names = arraylista;
if(constraint.length() == 0 ){
Result.values = Filtered_Names;
Result.count = Filtered_Names.size();
return Result;
}
String nomestringa = String.valueOf(constraint);
String[] separated = nomestringa.split(" +");
for (int i=0;i<separated.length;i++){
Filtered_Names = doSomethingVoid(Filtered_Names, String.valueOf(separated[i])); // it returns another ArrayList<string>
}
for (int i2 = 3; i2<Filtered_Names.size(); i2=i2+6)
Result.values = Filtered_Names;
Result.count = Filtered_Names.size();
return Result;
}
@SuppressWarnings("unchecked")
@Override
protected void publishResults(CharSequence constraint,FilterResults results) {
try{
arrayaux=null;
arrayaux = (ArrayList<String>)results.values; // MY RESULTS ARE GREAT HERE
notifyDataSetChanged();
} catch (Exception e){
e.printStackTrace();
notifyDataSetInvalidated();
}
}
}
public View getView(int position, View convertView, ViewGroup parent) {
return convertView;
}
}
解决!!
由于OnTextChanged的参数,我有很多ot lv.setAdapter(null)...其中一些由missclick或其他改变。遗憾!
)
答案 0 :(得分:0)
我认为你不能用内置的过滤器做到这一点。您需要扩展SimpleAdapter
并编写自己的Filter
课程。 Here's这篇文章会给你一些关于如何做到这一点的提示。