2015-04-21 95 views
0

我有一個ListView,帶有一個擴展BaseAdapter的自定義適配器。 ListView的來源是一個帶有自定義對象的ArrayList。這些自定義對象具有最喜歡的成員變量。我希望用戶能夠點擊操作欄中的圖標並切換列表是顯示所有對象,還是僅顯示「favorite」屬性設置爲true的對象。根據是否選擇「收藏夾」選項來篩選ListView

我的第一種類似hack-y的解決方案是創建兩個ArrayLists,其中一個包含所有對象,其中一個包含所有的收藏夾。然後在動作按鈕點擊,轉換適配器源列表兩個列表之間是這樣的:

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

這似乎是它的工作,但我有一個很難相信,沒有某種形式的清潔方法過濾列表視圖的結果。我所能找到的唯一信息是基於用戶輸入的文本進行過濾。

+0

肯定,實現自己的Filter類,在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

......怎麼 「否則{ mMembers.removeAll(); mMembers.addAll(mTempMembers);} 」 而不是 「其他{ mMembers = mTempMembers; }」 – HoJunLee

+0

@Zelleat確定這工作,但你能解釋爲什麼我必須手動改變mMembers的值,而只是重新指定mMembers變量嗎? – user50210