美文网首页
ExpandableListView(QQ好友列表)

ExpandableListView(QQ好友列表)

作者: 码农耕 | 来源:发表于2019-06-04 22:44 被阅读0次

ExpandableListView,就是可折叠的列表,它是ListView的子类, 在ListView的基础上它把应用中的列表项分为几组,每组里又可包含多个列表项。

ExpandableListView用法和Listview差不多,设置适配器,适配器里面设置数据。

1.我们先在控制器的布局文件中添加一个ExpandableListView

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="5dp"
tools:context=".MainActivity">

<ExpandableListView
    android:id="@+id/exlistview"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:childDivider="#E02D2F"/>

</RelativeLayout>

2.ExpandableListView中分为组头和组里的每一个item,所以需要两个布局文件,相互对应。
设置组头的布局文件group_item.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">

    <TextView
        android:id="@+id/tv_group_name"
        android:layout_width="match_parent"
        android:layout_height="56dp"
        android:gravity="center_vertical"
        android:paddingLeft="30dp"
        android:text="组头"
        android:textStyle="bold"
        android:textSize="20sp" />

</LinearLayout>

设置每一组的item布局文件list_item.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">

    <ImageView
        android:id="@+id/img_icon"
        android:layout_width="48dp"
        android:layout_height="48dp"
        android:src="@mipmap/ic_launcher"
        android:focusable="false"/>

    <TextView
        android:id="@+id/tv_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="15dp"
        android:layout_marginTop="15dp"
        android:focusable="false"
        android:text="每一组"
        android:textSize="18sp" />
    
</LinearLayout>

回到控制器中
获取到ExpandableListView

        expandableListView = (ExpandableListView) findViewById(R.id.exlistview);

设置适配器

         expandableListView.setAdapter(new MyExpandableListView());// 设置适配器

自定义适配器

//为ExpandableListView自定义适配器
    class MyExpandableListView extends BaseExpandableListAdapter {

        //返回一级列表的个数
        @Override
        public int getGroupCount() {
            return groups.length;
        }

        //返回每个二级列表的个数
        @Override
        public int getChildrenCount(int groupPosition) { //参数groupPosition表示第几个一级列表
            ArrayList list = childs.get(groupPosition);
            return list.size();
//            return childs[groupPosition].length;
        }

        //返回一级列表的单个item(返回的是对象)
        @Override
        public Object getGroup(int groupPosition) {
            return groups[groupPosition];
        }

        //返回二级列表中的单个item(返回的是对象)
        @Override
        public Object getChild(int groupPosition, int childPosition) {
//            return childs[groupPosition][childPosition];  //不要误写成groups[groupPosition][childPosition]
            ArrayList list = childs.get(groupPosition);
            return list.get(childPosition);
        }

        @Override
        public long getGroupId(int groupPosition) {
            return groupPosition;
        }

        @Override
        public long getChildId(int groupPosition, int childPosition) {
            return childPosition;
        }

        //每个item的id是否是固定?一般为true
        @Override
        public boolean hasStableIds() {
            return true;
        }

        //【重要】填充一级列表
        @Override
        public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {

            if (convertView == null) {
                convertView = getLayoutInflater().inflate(R.layout.group_item, null);
            } else {

            }
            TextView tv_group = (TextView) convertView.findViewById(R.id.tv_group_name);
            tv_group.setText(groups[groupPosition]);
            return convertView;
        }

        //【重要】填充二级列表
        @Override
        public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {

            if (convertView == null) {
                convertView = getLayoutInflater().inflate(R.layout.list_item, null);
            }

            ImageView iv_child = (ImageView) convertView.findViewById(R.id.img_icon);
            TextView tv_child = (TextView) convertView.findViewById(R.id.tv_name);

            ArrayList list = childs.get(groupPosition);
            ItemModel model = (ItemModel)list.get(childPosition);
            iv_child.setImageResource(model.getiId());
            tv_child.setText(model.getiName());

//            tv_child.setText(childs[groupPosition][childPosition]);

            return convertView;
        }

        //二级列表中的item是否能够被选中?
        @Override
        public boolean isChildSelectable(int groupPosition, int childPosition) {
            return true;
        }
    }

设置每一组是否展开:.expandGroup()
全部展开:

for (int i = 0;i<groups.length;
    expandableListView.expandGroup(i);// 设置展开
}

// 设置组头箭头为空

expandableListView.setGroupIndicator(null);

完整Demo

相关文章

  • ExpandableListView(QQ好友列表)

    ExpandableListView,就是可折叠的列表,它是ListView的子类, 在ListView的基础上它...

  • 类似QQ好友列表"思想"

    背景 现如今越来越多的应用中都会有类似qq好友列表的展示与隐藏的情况,那么有必要熟悉一下这一块的思想,之后写起代码...

  • QQ好友列表的实现

    本人不才,为了加强练习,就想起了之前学的UI控件,找到以前的例子,就开始模仿学习,这是一篇关于UITablevie...

  • 二级列表

    二级列表(ExpandableListView) 概念: A view that shows items in a...

  • 折叠列表-ExpandableListView

    1.1xml布局 1.2组布局 1.3子布局 2.适配器 extends BaseExpandableListAd...

  • 再不联系,我们又变成陌生人了

    前几天,有个朋友询问我的QQ账号里有多少QQ好友,我没多问,就打开QQ看了看列表里的好友,没想到做个加法,QQ好友...

  • Android shape使用总结

    安卓开发宝典文章列表: 比ExpandableListView更强大的分组列表实现 约束布局实战 shape使用总...

  • 动态爬虫之QQ好友列表

    步骤 1、分析qzone请求2、分析参数来源3、仿照数据请求 上次写的一个qzone登陆写的不详细这次决定写一个详...

  • 类似qq好友列表的实现

    今天在工作的过程中,有一个页面的实现类似于qq好友列表。经过上网查资料,自己进行了简单的实现。 通过代码,将上面的...

  • TableView实现QQ好友列表效果

    概述:本文是黑马程序员UI视频教程第九天,QQ好友列表案例的总结 该案例中主要涉及的知识点有:改变图片在UIBut...

网友评论

      本文标题:ExpandableListView(QQ好友列表)

      本文链接:https://www.haomeiwen.com/subject/rihdxctx.html