现在的位置: 首页 > 综合 > 正文

笔记21–ExpandableListView

2018年07月12日 ⁄ 综合 ⁄ 共 4485字 ⁄ 字号 评论关闭

 ExpandableListView可实现伸缩的下拉列表,上图看(图片效果真不咋的):上源码

三步实现:1)界面添加ExpandableListView。2)给要添加到ExpandableListView的数据赋值。3)实现适配器,为ExpandableListView添加适配器。

看着是不是跟ListView或者GridView一样呢。本来就特别像。

1、属性介绍

id:如果我们给他赋值为@+id/exlv,那会出现什么情况呢?看错误日志:Your content must have a ExpandableListView whose id attitude is 'android.R.id.list'。所以如果只有一个ExpandableListView,则它的id必须为:android:id="@id/android:list"。java文件中获取此控件:getExpandableListView()

android:cacheColorHint="#00000000":可去除拖动view时背景变成黑色的效果。

android:listSelector="#00000000":可去除选中时的黄色底色.

android:drawSelectOnTop="false":用来设置listview上的背景色会不会覆盖内容。false表示不会。

2、适配器介绍:BaseExpandableListAdapter,说说其中的一些方法。

BaseExpandableListAdapter中的方法大都含有group或child,先说说group和child:group指的上图的超市、商城、服务,即下拉列表的父类;child指的是下拉列表。

1)getGroupCount():获取group总数,跟ListView/GroupView一样。getChildCount():注意这并不是获取所有group下child的总数,而是获取任意一个group下的child总数。

2)getGroup()、getChild():获取任意一个group/child的数据。可重写可不重写。若重写getChild(),注意返回的是指定group下的child:

public Object getChild(int groupPosition, int childPosition) {
	// TODO 自动生成的方法存根
	return childPrice.get(groupPosition).get(childPosition);
}

3)getGroupId()、getChildId():只用返回group和child的id就行了。对child,不用指定group。

public long getChildId(int groupPosition, int childPosition) {
	// TODO 自动生成的方法存根
	return childPosition;
}

4)hasStableIds():group/child是否有固定id,可不重写。

5)getGroupView()、getChildView():跟ListView/GroupView一样。

6)isChildSelectable():设置指定位置的child是否可点击。

3、数据赋值:被这个耽误了好久。

group的数据赋值很简单跟ListView/GroupView一样,只用声明List<TObject>就行了。因为可把所有的group看做一个ListView。而对child的赋值,必须特别注意:

每个group下的child都可看做是一个List,所以给child数据类型应声明为List<List<TObject>>。

贴一段赋值代码,如果只有一个child增加一个List<TObject>,那只有第一组group有数据。

private void initializeData() {
	groupTypes=new ArrayList<String>();
	groupTypes.add("超市");
	groupTypes.add("商城");
	groupTypes.add("服务");

	groupIcon=new ArrayList<Bitmap>();
	bt=BitmapFactory.decodeResource(getResources(), R.drawable.a1_delete);
	groupIcon.add(bt);
	groupIcon.add(bt);
	groupIcon.add(bt);

	childGoodsIcon=new ArrayList<List<Bitmap>>();
	List<Bitmap> childGoodsIcon_l=new ArrayList<Bitmap>();
	childGoodsIcon_l.add(bt);
	childGoodsIcon_l.add(bt);
	childGoodsIcon_l.add(bt);
	List<Bitmap> childGoodsIcon_m=new ArrayList<Bitmap>();
	childGoodsIcon_m.add(bt);
	childGoodsIcon_m.add(bt);
	childGoodsIcon_m.add(bt);
	List<Bitmap> childGoodsIcon_n=new ArrayList<Bitmap>();
	childGoodsIcon_n.add(bt);
	childGoodsIcon_n.add(bt);
	childGoodsIcon_n.add(bt);
	childGoodsIcon.add(childGoodsIcon_l);
	childGoodsIcon.add(childGoodsIcon_m);
	childGoodsIcon.add(childGoodsIcon_n);

	childDescip=new ArrayList<List<String>>();
	List<String> childDescip_l=new ArrayList<String>();
	childDescip_l.add("1");
	childDescip_l.add("2");
	childDescip_l.add("3");
	List<String> childDescip_m=new ArrayList<String>();
	childDescip_m.add("4");
	childDescip_m.add("5");
	childDescip_m.add("6");
	List<String> childDescip_n=new ArrayList<String>();
	childDescip_n.add("7");
	childDescip_n.add("8");
	childDescip_n.add("9");
	childDescip.add(childDescip_l);
	childDescip.add(childDescip_m);
	childDescip.add(childDescip_n);

	childPrice=new ArrayList<List<String>>();
	List<String> childPrice_l=new ArrayList<String>();
	childPrice_l.add("10");
	childPrice_l.add("11");
	childPrice_l.add("12");
	List<String> childPrice_m=new ArrayList<String>();
	childPrice_m.add("13");
	childPrice_m.add("14");
	childPrice_m.add("15");
	List<String> childPrice_n=new ArrayList<String>();
	childPrice_n.add("16");
	childPrice_n.add("17");
	childPrice_n.add("18");
	childPrice.add(childPrice_l);
	childPrice.add(childPrice_m);
	childPrice.add(childPrice_n);

	childNum=new ArrayList<List<String>>();
	List<String> childNum_m=new ArrayList<String>();
	childNum_m.add("19");
	childNum_m.add("20");
	childNum_m.add("21");
	List<String> childNum_n=new ArrayList<String>();
	childNum_n.add("22");
	childNum_n.add("23");
	childNum_n.add("24");
	List<String> childNum_l=new ArrayList<String>();
	childNum_l.add("25");
	childNum_l.add("26");
	childNum_l.add("27");
	childNum.add(childNum_l);
	childNum.add(childNum_m);
	childNum.add(childNum_n);
}

贴点别人写的赋值代码,好屌:

 /**  
     * 初始化组、子列表数据  
     */  
    private void initializeData(){  
        group = new ArrayList<String>();  
        child = new ArrayList<List<String>>();  
          
        addInfo("Andy",new String[]{"male","138123***","GuangZhou"});  
        addInfo("Fairy",new String[]{"female","138123***","GuangZhou"});  
        addInfo("Jerry",new String[]{"male","138123***","ShenZhen"});  
        addInfo("Tom",new String[]{"female","138123***","ShangHai"});  
        addInfo("Bill",new String[]{"male","138231***","ZhanJiang"});  
          
    }  
      
    /**  
     * 模拟给组、子列表添加数据  
     * @param g-group  
     * @param c-child  
     */  
    private void addInfo(String g,String[] c){  
        group.add(g);  
        List<String> childitem = new ArrayList<String>();  
        for(int i=0;i<c.length;i++){  
            childitem.add(c[i]);  
        }  
        child.add(childitem);  
    }

4、设置点击事件:setOnChildClickListener()

5、更改group显示的箭头方向,其实只是更好背景图片。

抱歉!评论已关闭.