三级扩展列表 学习心得

@Override
public View getChildView(int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
    final ExpandableListView expandableListView = getExpandableListView();
    /**
     * 这里每个exListView 只有一个元素, 每个元素代表二级目录的每个目录 
     * 
     */
    EntryChild child = getChild(groupPosition, childPosition);
    ArrayList<EntryChild> arrayList = new ArrayList<EntryChild>();
    arrayList.add(child);
    
    System.out.println("--- > getChildView " + groupPosition +"."+ childPosition + child);
    ChildAdapter childAdapter = new ChildAdapter(context, arrayList);
    expandableListView.setAdapter(childAdapter);

    
    expandableListView.setOnChildClickListener(new OnChildClickListener() {

        @Override
        public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {
            System.out.println("click: " + groupPosition + ", " + childPosition);
            return false;
        }
    });
    /**
     * 子ExpandableListView展开时,因为group只有一项,所以子ExpandableListView的总高度=
     * (子ExpandableListView的child数量 + 1 )* 每一项的高度
     */
    expandableListView.setOnGroupExpandListener(new OnGroupExpandListener() {

        @Override
        public void onGroupExpand(int groupPosition) {
            AbsListView.LayoutParams lp = new AbsListView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 
                    50 * (getChild(groupPosition, childPosition).data.size()+1));
            expandableListView.setLayoutParams(lp);
        }
    });

    /**
     * 子ExpandableListView关闭时,此时只剩下group这一项,
     * 所以子ExpandableListView的总高度即为一项的高度
     * */
    
    expandableListView.setOnGroupCollapseListener(new OnGroupCollapseListener() {
        
        @Override
        public void onGroupCollapse(int groupPosition) {
            LayoutParams lp = new AbsListView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 50);
            expandableListView.setLayoutParams(lp);
            
        }
    });

    return expandableListView;
}

private ExpandableListView getExpandableListView() {
    ExpandableListView expandableListView = new ExpandableListView(context);
    LayoutParams lp = new AbsListView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 50);
    expandableListView.setLayoutParams(lp);
    return expandableListView;
}
原文地址:https://www.cnblogs.com/toolbear/p/6095236.html