2015-04-21 1 views
0

У меня есть ListView с пользовательским адаптером, который расширяет BaseAdapter. Источником ListView является ArrayList с пользовательскими объектами. Эти пользовательские объекты имеют избранную переменную-член. Я хочу, чтобы пользователь мог щелкнуть по значку на панели действий и переключить, показывает ли список все объекты, или только те, у которых свойство «Избранное» установлено равным true.Фильтр ListView на основе, если выбрана опция «Избранное»

Мое первое видное решение - создать два массива ArrayLists, один со всеми объектами, один со всеми избранными. Затем на кнопку действия мыши, переключить список источников адаптера между двумя списками, как это:

protected void toggleList(){ 
    CustomAdapter adapter; 
    if (favoriteSelected){ 
    adapter=new CustomAdapter(this,favoriteList); 
    }else{ 
    adapter=new CustomAdapter(this,fullList); 
    } 
    listView.setAdapter(adapter); 
} 

Это кажется, что это будет работать, но мне трудно поверить, что не существует какое-то чистый метод для фильтрации результатов просмотра списка. Единственная информация, которую я смог найти, - это фильтрация на основе ввода текста пользователем.

+0

уверен, метод реализовать свой собственный класс фильтра, возвращает его экземпляр в YourAdapter.getFilter(), (YourAdapter необходимо реализовать интерфейс Фильтруемые) – pskink

ответ

0

Как насчет ...

class CustomAdapter{ 
    List<member> mTempMembers; 
    List<member> mMembers; 

    ... 

    showFavorite(boolean isShowFavoriteOnly){ 

     if(isShowFavoriteOnly){ 
      mMembers.removeAllExceptFavorite(); 
     }else{ 
      mMembers.removeAll(); 
      mMembers.addAll(mTempMembers); 
      //mMembers = mTempMembers; 
     } 
     this.notifyDataSetChanged(); 

    } 

} 
+1

мне понравилась ваша идея, однако, есть небольшая проблема. Когда я вызываю showFavorite (true), он работает правильно. Когда я переключаюсь обратно, listview отображает правильный «полный» список со всеми любимыми и не любимыми контактами, но когда я нажимаю на второй элемент в полном списке, он приводит меня к подробному представлению второго элемента в любимый список. Таким образом, похоже, что ListView обновляется правильно, но адаптер, который обрабатывает щелчок элемента, не является. Есть идеи? – user50210

+0

Как насчет ... "Else { mMembers.removeAll(); mMembers.addAll (mTempMembers); }" вместо "Else { mMembers = mTempMembers; }" – HoJunLee

+0

@Zelleat Хорошо это работает, но не могли бы вы объяснить, почему я должен вручную изменить значение mMembers, а просто переназначить переменную mMembers? – user50210