ExpandableListView实现的简单类似QQ好友界面的可展开下拉列表

来源:互联网 发布:单片机原理图怎么看 编辑:程序博客网 时间:2024/04/28 13:40

结果图:



布局文件:

<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:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

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

</RelativeLayout>

组的样式布局:

<?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="vertical" >
    <TextView
        android:id="@+id/gtv"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:textSize="36sp"
        android:textColor="#0000ff"/>

</LinearLayout>

组展开后的子元素样式布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
     >
    <ImageView
        android:id="@+id/cimg"
        android:layout_width="50dp"
        android:layout_height="50dp"/>
    <TextView
        android:id="@+id/ctv"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_toRightOf="@id/cimg"
        android:textSize="30sp"
        android:textColor="#00ff00"/>

</RelativeLayout>


.Java文件:

package com.day8_qqdesign;


import android.app.Activity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.ExpandableListView;
import android.widget.ExpandableListView.OnChildClickListener;
import android.widget.ExpandableListView.OnGroupClickListener;
import android.widget.ExpandableListView.OnGroupCollapseListener;
import android.widget.ExpandableListView.OnGroupExpandListener;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {

    ExpandableListView elv;
    //分组数据源
    String groupData[]={"家人","好朋友","同事"};
    String childData[][]={{"妈妈","爸爸","姐姐","弟弟"},{"李易峰","林志颖","陈学冬","杨洋"},{"刘亦菲","林依晨","赵丽颖","杨幂"}};
    int[][] childimg={{R.drawable.img1,R.drawable.img2,R.drawable.img3,R.drawable.img4},{R.drawable.img5,R.drawable.img6,R.drawable.img7,R.drawable.img8},{R.drawable.img9,R.drawable.img10,R.drawable.img11,R.drawable.img12}};
    MyBaseadapter adapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        elv=(ExpandableListView) findViewById(R.id.elv);
        adapter=new MyBaseadapter();
        elv.setAdapter(adapter);
        elv.setOnGroupClickListener(new OnGroupClickListener() {
            //点击哪个ExpandableListView,点击哪个分组的item,分组下标,分组item下标
            @Override
            public boolean onGroupClick(ExpandableListView parent, View v,
                    int groupPosition, long id) {
                Toast.makeText(MainActivity.this,groupData[groupPosition],0).show();

                return false;
            }
        });
        //监听分组里内容点击事件
        elv.setOnChildClickListener(new OnChildClickListener() {
            //点击哪个控件,点击分组里内容的视图,点击分组的下标,点击分组里内容的下标,分组里内容的id
            @Override
            public boolean onChildClick(ExpandableListView parent, View v,
                    int groupPosition, int childPosition, long id) {
                Toast.makeText(MainActivity.this,childData[groupPosition][childPosition],0).show();
                return false;
            }
        });
        //监听分组展开动作
        elv.setOnGroupExpandListener(new OnGroupExpandListener() {
            
            @Override
            public void onGroupExpand(int groupPosition) {
                Toast.makeText(MainActivity.this,groupData[groupPosition]+"...列表展开了",0).show();    
            }
        });
        //监听分组缩起来动作
        elv.setOnGroupCollapseListener(new OnGroupCollapseListener() {
            
            @Override
            public void onGroupCollapse(int groupPosition) {
                Toast.makeText(MainActivity.this,groupData[groupPosition]+"...列表收起来了",0).show();

            }
        });
        
    }
    public class MyBaseadapter extends BaseExpandableListAdapter
    {
        //获取分组个数
        @Override
        public int getGroupCount() {
            return groupData.length;
        }
        //获取分组数据的个数
        @Override
        public int getChildrenCount(int groupPosition) {
            return childData[groupPosition].length;
        }
        //下标为参数,获取分组的数据对象
        @Override
        public Object getGroup(int groupPosition) {
            return groupData[groupPosition];
        }
        //下标为 groupPositio获取分组里下标为childPosition的数据对象
        @Override
        public Object getChild(int groupPosition, int childPosition) {
            return childData[groupPosition][childPosition];
        }
        //下标为 int groupPositio获取分组的item 的id
        @Override
        public long getGroupId(int groupPosition) {
            return groupPosition;
        }
        //下标为 int groupPositio获取分组的数据对象里面 下标为childPosition的item的id
        @Override
        public long getChildId(int groupPosition, int childPosition) {
            return childPosition;
        }
        //底层设计
        @Override
        public boolean hasStableIds() {
            return false;
        }
    
        /**
         * getGroupView的视图对象 view
         *
         * int groupPosition: 当前分组的下标
         *  boolean isExpanded:当前分组是否展开
         *  View convertView: 复用的视图
         *  ViewGroup parent: 父控件ExpandableListView
         */
        @Override
        public View getGroupView(int groupPosition, boolean isExpanded,
                View convertView, ViewGroup parent) {
            LayoutInflater inflater = getLayoutInflater();
            View view = inflater.inflate(R.layout.group_style,null);
            TextView tv = (TextView) view.findViewById(R.id.gtv);
            tv.setText(groupData[groupPosition]);
            return view;
        }
        /**
         * getChildView 子视图对象
         * int groupPosition:当前分组的下标
         * int childPosition:子分组的下标
         * boolean isLastChild:是否是最后一个视图view
         * View convertView:复用的视图
         * ViewGroup parent:父控件ExpandableListView
         */
        @Override
        public View getChildView(int groupPosition, int childPosition,
                boolean isLastChild, View convertView, ViewGroup parent) {
            LayoutInflater inflater = getLayoutInflater();
            View view = inflater.inflate(R.layout.child_style,null);
            TextView tv = (TextView) view.findViewById(R.id.ctv);
            tv.setText(childData[groupPosition][childPosition]);
            ImageView img=(ImageView) view.findViewById(R.id.cimg);
            img.setImageResource(childimg[groupPosition][childPosition]);
            return view;
        }
        //当前子元素是否能被选中
        @Override
        public boolean isChildSelectable(int groupPosition, int childPosition) {
            return true;
        }
        
    }

}


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 外贸中交货期晚了怎么办 履约保函到期了怎么办 续贷高校未通过怎么办 安卓手机网速慢怎么办 探探性别错了怎么办 尿酸高导致脚肿怎么办 联通光猫复位后怎么办 头部和脸部出油怎么办 vcd解码板坏了怎么办 脚崴了里面筋疼怎么办 长寿龟身上烂了怎么办 纱裙没有腰身显胖怎么办 橘子平台下载速度慢怎么办 换手机号了支付宝账号怎么办 怀孕期间脚扭了怎么办 买了临街房后悔怎么办 绝地求生困在废车里怎么办 身体出现辅助睡眠状态怎么办 扁桃体发炎喉咙痒咳嗽怎么办 电脑玩英雄杀卡怎么办 康佳冰箱显示2e怎么办 高考登陆系统登录密码错误怎么办 苹果遇到ad登录问题怎么办? 小孩2天不拉屎怎么办 20天宝宝不大便怎么办 小孩几天不拉大便怎么办 宝宝经常不拉大便怎么办 宝宝便秘 肛裂了怎么办 3个月宝宝不便便怎么办 宝宝8个月不便便怎么办 宝宝在幼儿园不爱说话怎么办 广东学考考了d怎么办 上嘴唇干燥紧绷怎么办 美国大学gpa非常低怎么办 大学手机作弊通报教务处怎么办 崩坏3邮箱验证码过期怎么办 快递员被顾客恶意投诉怎么办 5岁幼儿逻辑思维差怎么办 脸一边胖一边瘦怎么办 夏天穿鞋子脚痒怎么办 脚痒怎么办但不是脚气