Фильтр более одного типа <Object> - PullRequest
0 голосов
/ 16 февраля 2019

В основном я хочу отфильтровать с помощью специального фильтра ArrayList, который содержит 2 типа элементов.<String> и <Titulo>, и я не могу его получить.

Ошибка в том, что при текущем методе, когда я нажимаю какую-либо клавишу, только фильтр возвращает нулевое представление.Но когда я делаю то же самое только с одним типом в фильтре, все идет хорошо.

 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> фильтруется, и все элементы типа string сохраняют позицию, чтобы сохранить все ArrayList в порядке.

1 Ответ

0 голосов
/ 16 февраля 2019

Если я правильно понял, вы хотите выполнить фильтр, если объект имеет тип Titulo, в противном случае просто добавьте его в массив.Если это предположение верно, вы должны проверить тип экземпляра вашего объекта (Titulo или String).Но вы на самом деле выполняете кастинг.

if(tempArray.get(i) instanceOf Titulo){
   //filter your titles here
} else {
  // add your String to the array
}
...