对ExpandableListView的小小使用

来源:互联网 发布:网络信息化建设需求 编辑:程序博客网 时间:2024/06/03 17:11

首先,我们明确一下思路:
第一步:设置最基本布局(layout),并初始化(MainActivity);
第二步:造数据(此处用最简单的数组呈现);
第三步:设置适配器
第四步:设置点击事件看效果(此处不展现)

第一步:
在activity_layout中添加如下代码:

        <ExpandableListView            android:id="@+id/elv"            android:layout_width="match_parent"            android:layout_height="wrap_content">        </ExpandableListView>

并在MainActivity进行初始化:

private ExpandableListView elv;//elv为自定义onCreate....{...     elv = (ExpandableListView) findViewById(R.id.elv);...}

第二步:
此处我们设置两个一维数组,一个用来代表分组(可以联想QQ中的分组),另一个用来存储头像的id,再用一个二维数组来代表分组中的子元素(也就是你QQ中的好友)。为了方便调用数据,我们需将这三个数组设置为全局量。代码如下:

private String []groups;//组名private String [][]children;//组内孩子int [][]drawable_items;//存放头像

为数组赋值:

private void initDate() {     //分组     groups = new String[]{"朋友","同学","亲友"};     //组内孩子     children = new String[][]{{"张三","李四","王五"},{"甲","乙","丙"},{"大姨","小姨","姑姑"}};     //头像     drawable_items = new int[][] {{R.drawable.a,R.drawable.b,R.drawable.c},{R.drawable.a,R.drawable.c,R.drawable.b},{R.drawable.c,R.drawable.b,R.drawable.a}};    }//此处a、b、c为我事先准备好的图片

第三步:(重点)
设置数据适配器,首先创建一个新的类:在项目文件下右击new->Java Class
这里写图片描述

此时,由于继承BaseExpandableListAdapter但并没有实现其方法,所以将鼠标移动到红色波浪线下,使用快捷键Alt+Enter将未实现方法加载出来。代码如下:

package com.example.myuniversity;import android.view.View;import android.view.ViewGroup;import android.widget.BaseExpandableListAdapter;import android.widget.ImageView;import android.widget.TextView;public class ElvAdapter extends BaseExpandableListAdapter {    private MainActivity mainActivity;    private String[] groups;    private String[][] children;    private int[][] drawable_items;//构造方法,方便实例化    public ElvAdapter(MainActivity mainActivity, String[] groups, String[][] children, int[][] drawable_items) {           this.mainActivity = mainActivity;           this.groups = groups;           this.children = children;           this.drawable_items = drawable_items;    }    @Override    public int getGroupCount() {        return groups.length;    }//得到分组数目    @Override    public int getChildrenCount(int i) {        return children[i].length;    }//得到组内孩子数目    @Override    public Object getGroup(int i) {        return groups[i];    }//将某一组返回    @Override    public Object getChild(int i, int i1) {        return children[i][i1];    }//将某个孩子返回    @Override    public long getGroupId(int i) {        return i;    }//返回组号    @Override    public long getChildId(int i, int i1) {        return i1;    }//返回孩子号    @Override    public boolean hasStableIds() {        return true;    }//是否有稳定的Id    @Override    public View getGroupView(int i, boolean b, View view, ViewGroup viewGroup) {        View view1 = View.inflate(mainActivity,R.layout.group_items,null);        TextView tv_title = view1.findViewById(R.id.tv_title);        tv_title.setText(groups[i]);        return view1;//此处不要误将view返回,view此处为空,下同    }//返回组视图(此处layout见下面)    @Override    public View getChildView(int i, int i1, boolean b, View view, ViewGroup viewGroup) {        View view1 = View.inflate(mainActivity,R.layout.group_items,null);        ImageView imageView = view1.findViewById(R.id.imageview);        TextView tv_title = view1.findViewById(R.id.tv_title);        tv_title.setText(children[i][i1]);        imageView.setImageResource(drawable_items[i][i1]);        return view1;    }//返回孩子的视图(见下面layout代码)    @Override    public boolean isChildSelectable(int i, int i1) {        return true;    }//孩子是否被选中}

由于适配器中需要返回组及孩子视图,所以在layout文件夹下新建group_items.xml文件。代码如下:

<?xml version="1.0" encoding="utf-8"?><LinearLayout    xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="horizontal">    //头像    <ImageView        android:id="@+id/imageview"        android:layout_width="40dp"        android:layout_height="40dp" />    //组的名字及孩子的名字(联想QQ)    <TextView        android:id="@+id/tv_title"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:textSize="20sp"/></LinearLayout>

如此,就将数据适配器完成了,剩下的就是为上文提到的elv装上适配器。
在MainActivity中的onCreate中:

initDate();//上文已实现//调用构造方法,为elv装上适配器elv.setAdapter(new ElvAdapter(this,groups,children,drawable_items));

如此,整体就完成了,至于再加点击事件的话,就在装载适配器之后就可以了,此处就不展示了。效果图如下:

这里写图片描述

ps: 这是我第一次写博客,有不足之处欢迎大家多多包含,我会虚心接受任何建言的,嘿嘿!

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 悄悄是别离的笙箫 至此深情别离后大结局 哪怕匆匆一眼就别离 别称 月亮别称 月亮的别称 中国别称 荷花别称 南京别称 荷花的别称 十月别称 中国的别称 九月别称 月份别称 南京的别称 十一月别称 十月的别称 酒的别称 桂花别称 北京别称 三月别称 广州别称 重庆别称 十二月别称 桂花的别称 菊花别称 秋天别称 太阳别称 月别称 年龄别称 六月别称 秋天的别称 成都别称 太阳的别称 农历别称 五月别称 六月的别称 莲花的别称 精卫的别称 济南别称 年龄的别称