簡體   English   中英

組擴展后,動態填充動態可擴展列表視圖

[英]Populate dynamically expandablelistview, after expansion of group

我對expandablelistview有問題,我已經為它實現了一個簡單的BaseExpandableListAdapter適配器,正如許多在線教程所講的那樣。

當我同時填充expandablelistview組和子級時,在片段的開頭,我沒有問題,但是當我嘗試在擴展子級時填充子級時(在onGroupClick內),此時我得到NullPointerException。適配器實現:

public int getChildrenCount(int groupPosition) {
    return namesCollections.get(contactNames.get(groupPosition)).size();
}

換句話說,我在適配器的構造函數(如下)中初始化的namesCollections似乎為空:

public FavoriteAdapter(Activity context, List<String> contactNames,
                       Map<String, List<String>> namesCollections) {
    this.context = context;
    this.namesCollections = namesCollections;
    this.contactNames = contactNames;
}

在組擴大時如何填充孩子?

如果您嘗試在單擊后添加背景數據,則意味着您要獲取的此集合的大小為null或0。 大多數likley為null,因為這是您獲取null指針的地方。 您不能在空引用上調用.size()

public int getChildrenCount(int groupPosition) {
    return namesCollections.get(contactNames.get(groupPosition)).size();
}

由於此刻集合為空,並且您計划以后添加數據,因此您需要初始化集合並用虛擬項目(在獲取數據時替換)填充它,或者不使用集合大小來確定集合中有多少個孩子,因為這不是一個准確的度量。

此外,請確保在添加后備數據時調用notifyDataSetHasChanged() ,以便重建視圖。

關於您的性能問題:在展開孩子的組,並且滾動列表視圖以使之展開時,ExpandableListView不會為孩子創建視圖(因此不會為孩子查詢數據-即不會調用getChildView()方法)。該孩子將顯示在屏幕上。 現在,如果您在開始時而不是動態地獲取所有數據,則仍然需要為擁有完整的備份數據集而付出性能損失。 因此,有理由動態地獲取數據,但是ELV並沒有浪費時間查詢尚未顯示的背景數據或為孩子創建視圖。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM