expandablelistadapter - 如何删除Android ExpandableListView中某个group item的child item?
怪我咯
怪我咯 2017-04-17 14:45:20
[Android讨论组]
怪我咯
怪我咯

走同样的路,发现不同的人生

全部回复(3)
高洛峰

检查你的数据定义,这种做法是非常危险的。我们要确保每个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。

ringa_lee

删除数组里对应的值,然后调用MyAdapter.notifyDataSetChanged()

ringa_lee

好好好# title

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号