ExpandListView总结

from 花葬_小吃一口
小白一位,本文仅一些自己在学习路上的一些总结,请各路大佬觉得不是,或有可补充的地方,请帮忙修正。学生感激不尽(耐心看完哦,代码有几百行,这是我对于可折叠列表学习所有的理解,希望可以帮助到有需要的人。请看本篇文章的伙伴,对于adapter有一定的理解)

在这里插入图片描述

可折叠列表

总有一些客户需求列表可以折叠。一开始能想到的就是定义一个type然后来区分哪一块来显示什么。这里要介绍一下ExpandListView的方便之处啦!!!
如果对可折叠列表有存在疑惑的伙伴可以参考一个QQ的好友列表。可折叠列表允许有父级标签,外加自己子级的内容。其实它就相当于两个listview的嵌套,说白了就是listview扩展来的。

添加内容

认识到可扩展列表后,我们很自然可以想到添加内容进去就需要父级集合和子级集合。

//首先我们需要定义两个存放数据的容器,一个用来存放父级内容,还有一个存放子级内容。这里的父级内容可以参考QQ好友列表的分组,子级内容可以参考分组里面的每一个好友。
private List<String> groupArray;//定义父级列表
 private List<List<String>> itemArray;//定义子列表
 private 
认识BaseExpandableListAdapter

想要进行个性化定制页面,那我们就需要先来认识ExpandableListView的adapter 里面有哪些方法和属性。

  @Override
    public int getGroupCount() {  //这个方法可以得到父级元素的数量
        return groupArray.;
    }

    @Override
    public int getChildrenCount(int groupPosition) {  //这个方法可以得到子级元素的数量
        return 0;
    }

    @Override
    public Object getGroup(int groupPosition) {   //这个方法得到第(groupPosition)个父级的内容
        return groupArray.get(groupPosition);
    }

    @Override
    public Object getChild(int groupPosition, int childPosition) {  //这个方法得到第(groupPosition)父级元素的第(childPosition)个的子级元素。
        return itemArray.get(groupPosition).get(childPosition);
    }

    @Override
    public long getGroupId(int groupPosition) {     //获取第(groupPostion)个组
        return groupPostion;
    }

    @Override
    public long getChildId(int groupPosition, int childPosition) {
        return childPosition;					//获取第(childPosition)个子级元素
    }

    @Override
    public boolean hasStableIds() {		
        return false;
    }

    @Override
    public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {  //这个方法就和listview的getview一样,不过这里多了个group,所以这里是进行父级标签的初始化和赋值。
    
       GroupHolder groupHolder  = new GroupHolder();
        if(convertView == null) {

         	convertView = inflater.inflate(R.layout.group_item,null);
            groupHolder.tvGroup = (TextView) convertView.findViewById(R.id.tvGroup);
            convertView.setTag(groupHolder);
        }else{
            groupHolder = (GroupHolder) convertView.getTag();
        }
       	Data02 data = (Data02) groupArray.get(groupPosition);
        groupHolder.tvGroup.setText(data.group_tvgroup+"");
        return convertView;
    }

    @Override
    public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
   // 这个方法是进行子级标签的初始化和赋值。 
       ChildHolder childHolder = new ChildHolder();
        if (convertView == null){

            convertView = inflater.inflate(R.layout.child_item,null);
            childHolder.tvItem = (TextView) convertView.findViewById(R.id.tvItem);
            convertView.setTag(childHolder);
        }else {
            childHolder = (ChildHolder) convertView.getTag();
        }
        Data03 data = (Data03) itemArray.get(groupPosition).get(childPosition);
        childHolder.tvItem.setText(data.child_tvItem);
        return convertView;
    }

    @Override    //当选择子节点的时候被调用
    public boolean isChildSelectable(int groupPosition, int childPosition) {
        return false;
    }

这个控件属性基本已经介绍完毕了。

下面这个是我的两个数据类
	public class Data02 {
    public int group_tvgroup;
	}
	class Data03{
    public  String child_tvItem;
	}
下面这个是我的两个Holder类
class GroupHolder{   //存放父级元素的Holder类
        public TextView tvGroup;
    }
    class ChildHolder{   //存放子级元素的Holder类
        public TextView tvItem;
    }
}
下面的这个是group_item
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView
        android:id="@+id/tvGroup"
        android:layout_width="200dp"
        android:layout_height="wrap_content"
        android:textSize="30dp"
        />

</LinearLayout>
下面的这个是child_item
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">
    <ExpandableListView
        android:id="@+id/elv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
    </ExpandableListView>

</LinearLayout>
下面的这个是expandablelist_item
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">
    <ExpandableListView
        android:id="@+id/elv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
    </ExpandableListView>

</LinearLayout>
  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值