如何删除Android ExpandableListView中某个group item的child item

如题所述

检查你的数据定义,这种做法是非常危险的。我们要确保每个group item都有一个对应的child list,这个list为空,代表该group item没有子条目。可是你的定义呢?如果删除了"second",那么“thrid”到底是group1,还是group2的child呢?从代码中细究:
private String [] groupStr={"第一组","第二组","第三组"};
private String [] childStr={"first","second","third"};
private List<Map<String, String>> groupData = new ArrayList<Map<String, String>>();
private List<Map<String, String>> childData = new ArrayList<Map<String, String>>();

@Override
public int getChildrenCount(int arg0) {
// 这里的arg0,代表groupPosition,
// 所以,如果你删除了某个child元素,必然导致你的childData和groupData数量不对等。
// 当adapter试图为group2调用这个方法时,崩溃。
return childData.get(arg0).size();
}

@Override
public Object getChild(int arg0, int arg1) {
return childData.get(arg0);

// arg0代表groupPosition,arg1代表childPosition,
// 建议你把这两个参数名称从arg*改成有意义的名字。
// 修改了childData的定义后,这里需要改写成:
return childData.get(arg0).get(arg1);
}

那么,正确的数据定义和adapter数据初始化应该怎么做呢?看adapter的构造器:
public SimpleExpandableListAdapter(
List<? extends Map<String, ?>> groupData,
List<? extends List<? extends Map<String, ?>>> childData) {}

(1) 应该像这样定义child data:List<? extends List<? extends Map<String, ?>>>
private List createChildLists(int groupCount) {
ArrayList result = new ArrayList();
for( int i = 0 ; i < groupCount ; i++ ) {
ArrayList secList = new ArrayList();
for( int n = 0 ; n < 3 ; n++ ) {
HashMap child = new HashMap();
child.put( "Sub Item", "Sub Item " + n );
secList.add( child );
}
result.add( secList );
}
return result;
}

(2) 然后这样删除child item:
List<Map<String, String>> childList = (List<Map<String, String>>)childData.get(groupPosition);
childList.remove(childPosition)

(3) 再然后 notifyDataSetChanged 通知adapter刷新View。
温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网