0

我正在创建一个可扩展列表,其中每个列表都包含一组对象(产品)。但是在获取孩子数时,我得到空指针异常并且不显示列表。

private Activity context;
private ArrayList<Product> allBmcList;
Map<ArrayList<Product>, List<String>> bmcCollection;
private List<String> Groups;



public ExpandableListAdapter(Activity context, List<String> groups,
        Map<ArrayList<Product>, List<String>> bmcList) {
    this.context = context;
    this.bmcCollection = bmcList;
    this.Groups = groups;
}

@Override
public int getChildrenCount(int groupPosition) {
    // Below line I am getting null pointer exception.


    return bmcCollection.get(Groups.get(groupPosition)).size();
}
4

2 回答 2

2

试试这个:

@Override
public int getChildrenCount(int groupPosition) {
 int size = 0;
 if (bmcCollection.get(Groups.get(groupPosition)).size() != null)
 size = bmcCollection.get(Groups.get(groupPosition)).size();
 return size;
}
于 2013-09-21T09:02:02.727 回答
1

如果我理解正确:

Groups.get(groupPosition))从列表中返回一个字符串,然后将其作为参数提供给bmcCollection.get(string)

现在 bmcCollection 是一个,并且在 API 中严格说:

返回指定键映射到的值,如果此映射不包含键的映射,则返回 null

因此它返回null,这会在调用size()方法后触发异常。

编辑:考虑评论。

我将继续假设List<String>地图中的列表与列表相同List<String> groups。因此我会使用这种地图:

Map<String, ArrayList<Product>> bmcCollection;其中 String 是组的名称,列表是其子项。

然后以下应该工作:

String group_name = Groups.get(groupPosition);
List<String> children = bmcCollection.get(name);
return children.size()

或更短:

(bmcCollection.get(Groups.get(groupPosition))).size()

于 2013-09-21T08:58:04.243 回答