基本上,我想使用自定义过滤器过滤包含2种项目的ArrayList。 <String>
和<Titulo>
,我无法理解。
错误是,当我按某个键时,当前方法只是过滤器返回null视图。但是当我只对过滤器中的一种进行相同操作时,一切都会好起来。
class customFilter extends Filter{
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults results = new FilterResults();
if(constraint!=null && constraint.length()>0){
constraint=constraint.toString().toUpperCase();
ArrayList<Object> filter = new ArrayList<>();
for(int i = 0; i<tempArray.size();i++) {
if(((titulo)tempArray.get(i)).getTituloTitulo().toUpperCase().contains(constraint)) {
titulo Titulo = new titulo(((titulo) tempArray.get(i)).getnTitulo(),((titulo) tempArray.get(i)).getTituloTitulo());
filter.add(Titulo);
}
if(((String) tempArray.get(i)).toUpperCase().contains("LIBRO")){
filter.add(tempArray.get(i));
}
}
results.count = filter.size();
results.values=filter;
}else{
results.count=tempArray.size();
results.values=tempArray;
}
return results;
}
和发布
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
originalArray=(ArrayList<Object>)results.values;
notifyDataSetChanged();
}
我只想过滤所有<titulo>
类型的项目,所有字符串类型的项目都保留位置,以使所有ArrayList保持顺序。
答案 0 :(得分:1)
如果我正确理解,如果对象为Titulo类型,则要执行过滤,否则,只需将其添加到数组即可。如果该假设正确,则应检查对象实例类型(Titulo或String)。但是您实际上正在执行转换。
if(tempArray.get(i) instanceOf Titulo){
//filter your titles here
} else {
// add your String to the array
}