对ExpandableListView的小小使用

首先,我们明确一下思路:
第一步:设置最基本布局(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
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值