我整天都在做这个,但我没有得到任何结果!
我一直在搜索诸如“多个过滤器”之类的帖子以及更多内容,但没有任何问题。
我有一个SimpleAdapter和一个填充的 ListView。现在我正在根据单词进行自定义搜索。我将单词与空格分开。例如:
想象一下,我的数据是:
猫喜欢狗
狗喜欢老鼠
老鼠喜欢奶酪
猫吃奶酪
如果我过滤“猫”,我将得到下一个列表:
猫喜欢狗
猫吃奶酪
如果我再次用“奶酪”过滤,我会得到:
猫吃奶酪
但相反,我得到了这个:
老鼠喜欢奶酪
猫吃奶酪
所以,我只得到最后一个过滤器。
这是我的代码:
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();
}
}
提前致谢!!!
编辑:
我得到了我的 CustomAdapter。我可以看到我的结果,但我无法设置我的适配器,不知道为什么。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 的参数,我有很多 lv.setAdapter(null) ......然后一些被missclick或其他改变了。对不起!
;)