zoukankan      html  css  js  c++  java
  • Android 实现仿QQ分组实现二级菜单展示

    首先展示下要实现的效果
    在这里插入图片描述
    动态查看请看链接https://recordit.co/GHjVH9WMz6

    1.首先要定义item,也就是二级展示的item

    child_item.xml

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout
        android:id="@+id/list_friend"
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <com.makeramen.roundedimageview.RoundedImageView xmlns:app="http://schemas.android.com/apk/res-auto"
            android:id="@+id/iv"
            android:layout_width="60dp"
            android:layout_height="60dp"
            android:gravity="center_horizontal"
            android:src="#000000"
            app:riv_border_color="#333333"
            app:riv_border_width="3dip"
            app:riv_corner_radius="10dip"
            app:riv_mutate_background="true"
            app:riv_oval="true" />
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="60dp"
            android:layout_toRightOf="@id/iv"
            android:orientation="vertical">
    
            <TextView
                android:id="@+id/friendname"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="好友1"
                android:textColor="#000000"
                android:textSize="30dp" />
    
            <TextView
                android:id="@+id/motto"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="这是好友1的签名"
                android:textColor="#000000"
                android:textSize="20dp" />
    
        </LinearLayout>
    </RelativeLayout>
    

    效果如下图所示:
    在这里插入图片描述
    2. 其次,设置分组item
    groupitem.xml

    <?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="wrap_content"
        android:layout_marginBottom="10dp">
    
        <ImageView
            android:id="@+id/triangle_right"
            android:layout_width="20dp"
            android:layout_height="40dp"
            android:layout_alignParentLeft="true"
            android:background="@drawable/triangle_right" />
    
        <TextView
            android:id="@+id/headtext"
            android:layout_width="match_parent"
            android:layout_height="40dp"
            android:layout_toLeftOf="@+id/online_people_num"
            android:layout_toRightOf="@+id/triangle_right"
            android:background="#E9E9E9"
            android:text="我的好友"
            android:textSize="25dp" />
    
        <TextView
            android:id="@+id/online_people_num"
            android:layout_width="60dp"
            android:layout_height="40dp"
            android:layout_alignParentRight="true"
            android:layout_marginRight="10dp"
            android:gravity="center_horizontal|center_vertical"
            android:text="0/15"
            android:textColor="#000000" />
    </RelativeLayout>
    

    效果下图所示:
    在这里插入图片描述
    3. 创建相应的数据对象
    添加分组父菜单Group

    Group.class

    package com.example.m1.QQGroup;
    
    public class Group {
        private int mGroupImage;
        private String mGroupName; //分组名
        private String mGroupNum; //分组人数
        private boolean isDown;
    
        public Group(int mGroupImage, String mGroupName, String mGroupNum) {
            this.mGroupImage = mGroupImage;
            this.mGroupName = mGroupName;
            this.mGroupNum = mGroupNum;
        }
    
        public Group() {
            this.isDown = false;
        }
    
        public void changeDownStatus(){
            isDown = !isDown;
        }
    
        public boolean isDown() {
            return isDown;
        }
    
        public void setDown(boolean down) {
            isDown = down;
        }
    
        public int getmGroupImage() {
            return mGroupImage;
        }
    
        public void setmGroupImage(int mGroupImage) {
            this.mGroupImage = mGroupImage;
        }
    
        public String getmGroupName() {
            return mGroupName;
        }
    
        public void setmGroupName(String mGroupName) {
            this.mGroupName = mGroupName;
        }
    
        public String getmGroupNum() {
            return mGroupNum;
        }
    
        public void setmGroupNum(String mGroupNum) {
            this.mGroupNum = mGroupNum;
        }
    }
    
    

    4. 添加子菜单Item
    Item.class

    package com.example.m1.QQGroup;
    
    public class Item {
        private String mName;//人名
        private String mMotto; //签名
        private int mPhoto; //头像
    
        public Item() {
    
        }
    
        public Item(String mName, String mMotto) {
            this.mName = mName;
            this.mMotto = mMotto;
    
        }
    
        public Item(String mName, String mMotto, int mPhoto) {
            this.mName = mName;
            this.mMotto = mMotto;
            this.mPhoto = mPhoto;
        }
    
        public String getmName() {
            return mName;
        }
    
        public void setmName(String mName) {
            this.mName = mName;
        }
    
        public String getmMotto() {
            return mMotto;
        }
    
        public void setmMotto(String mMotto) {
            this.mMotto = mMotto;
        }
    
        public int getmPhoto() {
            return mPhoto;
        }
    
        public void setmPhoto(int mPhoto) {
            this.mPhoto = mPhoto;
        }
    }
    
    

    5. 添加适配器

    MyBaseExpandableListAdapter.class

    package com.example.m1.QQGroup;
    
    import android.content.Context;
    import android.util.Log;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.BaseExpandableListAdapter;
    import android.widget.ImageView;
    import android.widget.TextView;
    
    import com.example.m1.R;
    
    import java.util.ArrayList;
    
    public class MyBaseExpandableListAdapter extends BaseExpandableListAdapter {
    
        private ArrayList<Group> gData; //分组
        private  ArrayList<ArrayList<Item>> iData; //长链表
        private Context mContext;
    
        public MyBaseExpandableListAdapter(ArrayList<Group> gData, ArrayList<ArrayList<Item>> iData, Context mContext) {
            this.gData = gData;
            this.iData = iData;
            this.mContext = mContext;
        }
    
        @Override
        public int getGroupCount() {
            return gData.size();
        }
    
        @Override
        public int getChildrenCount(int i) {
            return iData.get(i).size();
        }
    
        @Override
        public Object getGroup(int i) {
            return gData.get(i);
        }
    
        @Override
        public Object getChild(int i, int i1) {
            return iData.get(i).get(i1);
        }
    
        @Override
        public long getGroupId(int i) {
            return i;
        }
    
        @Override
        public long getChildId(int i, int i1) {
            return i1;
        }
    
        @Override
        public boolean hasStableIds() {
            return false;
        }
    
        /**
         * 取得用于显示给定分组的视图,这个方法仅返回分组的试图对象
         * @param i
         * @param b
         * @param view
         * @param viewGroup
         * @return
         */
        @Override
        public View getGroupView(final int i, boolean b, View view, final ViewGroup viewGroup) {
            final ViewHolderGroup groupHolder;
            if (view == null){
                view = LayoutInflater.from(mContext).inflate(R.layout.groupitem,viewGroup,false);
                groupHolder = new ViewHolderGroup();
                groupHolder.mGroupImage = view.findViewById(R.id.triangle_right);
                groupHolder.mGroupName = view.findViewById(R.id.headtext);
                groupHolder.mGroupNum = view.findViewById(R.id.online_people_num);
                view.setTag(groupHolder);
            }else{
                groupHolder = (ViewHolderGroup) view.getTag();
            }
            //groupHolder.mGroupImage.setImageResource(gData.get(i).getmGroupImage());
            Log.d("gData",gData.get(i).getmGroupImage()+"");
            Log.d("gData",gData.get(i).getmGroupName()+"");
            groupHolder.mGroupName.setText(gData.get(i).getmGroupName());
            groupHolder.mGroupNum.setText(gData.get(i).getmGroupNum());
    
            return view;
        }
    
        @Override
        public View getChildView(int i, int i1, boolean b, View view, ViewGroup viewGroup) {
            ViewHolderItem itemHolder;
            if (view == null){
                view = LayoutInflater.from(mContext).inflate(R.layout.child_item,viewGroup,false);
                itemHolder = new ViewHolderItem();
                itemHolder.mPhoto = view.findViewById(R.id.iv);
                itemHolder.mMotto = view.findViewById(R.id.motto);
                itemHolder.mName = view.findViewById(R.id.friendname);
                view.setTag(itemHolder);
            }else{
                itemHolder = (ViewHolderItem) view.getTag();
            }
    
            itemHolder.mPhoto.setImageResource(iData.get(i).get(i1).getmPhoto());
            itemHolder.mName.setText(iData.get(i).get(i1).getmName());
            itemHolder.mMotto.setText(iData.get(i).get(i1).getmMotto());
            return view;
        }
    
        /**
         * 设置子列表是否可以选中
         * @param i
         * @param i1
         * @return
         */
        @Override
        public boolean isChildSelectable(int i, int i1) {
            return true;
        }
    
        private static class  ViewHolderGroup{
            private ImageView mGroupImage;
            private TextView mGroupName; //分组名
            private TextView mGroupNum; //分组人数
            private boolean isDown;
    
            public ViewHolderGroup() {
                isDown = false;
            }
        }
        private  static class ViewHolderItem{
            private TextView mName;//人名
            private TextView mMotto; //签名
            private ImageView mPhoto; //头像
        }
    }
    
    

    6. Main5Activity中填充数据
    Main5Activity.class

    package com.example.m1.QQGroup;
    
    import android.content.Context;
    import android.os.Bundle;
    import android.support.v7.app.AppCompatActivity;
    import android.view.View;
    import android.widget.ExpandableListView;
    import android.widget.Toast;
    
    import com.example.m1.R;
    
    import java.util.ArrayList;
    
    public class Main5Activity extends AppCompatActivity {
    
        private ArrayList<Group> gData = null; //存储所有的分组信息
        private ArrayList<ArrayList<Item>> iData = null; //每个分组的子信息
        private ArrayList<Item> lData = null;
        private Context mContext;
        private ExpandableListView mQQlist;
        private MyBaseExpandableListAdapter myAdapter = null;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main5);
            mContext = Main5Activity.this;
            mQQlist = findViewById(R.id.QQList);
            //数据准备
            gData = new ArrayList<Group>();
            iData = new ArrayList<ArrayList<Item>>();
            gData.add(new Group(R.drawable.triangle_right,"小学同学","1/7"));
            gData.add(new Group(R.drawable.triangle_right,"初中同学","2/7"));
            gData.add(new Group(R.drawable.triangle_down,"高中同学","3/7"));
            gData.add(new Group(R.drawable.triangle_right,"大学同学","4/7"));
    
            lData =new ArrayList<Item>();
    
            //小学组
            lData.add(new Item("朋友1","有志者事竟成",R.drawable.f015));
            lData.add(new Item("朋友2","有志者事竟成",R.drawable.f015));
            lData.add(new Item("朋友3","有志者事竟成",R.drawable.f015));
            lData.add(new Item("朋友4","有志者事竟成",R.drawable.f040));
            lData.add(new Item("朋友5","有志者事竟成",R.drawable.f015));
            lData.add(new Item("朋友6","有志者事竟成",R.drawable.f015));
            lData.add(new Item("朋友7","有志者事竟成",R.drawable.f040));
            iData.add(lData);
            //初中组
            lData =new ArrayList<Item>();
            lData.add(new Item("朋友1","我爱你,不是说说而已",R.drawable.f015));
            lData.add(new Item("朋友2","我爱你,不是说说而已",R.drawable.f015));
            lData.add(new Item("朋友3","我爱你,不是说说而已",R.drawable.f040));
            lData.add(new Item("朋友4","我爱你,不是说说而已",R.drawable.f015));
            lData.add(new Item("朋友5","我爱你,不是说说而已",R.drawable.f040));
            lData.add(new Item("朋友6","我爱你,不是说说而已",R.drawable.f015));
            lData.add(new Item("朋友7","我爱你,不是说说而已",R.drawable.f040));
            iData.add(lData);
            //高中组
            lData =new ArrayList<Item>();
            lData.add(new Item("朋友1","为赋新词强说愁",R.drawable.f015));
            lData.add(new Item("朋友2","为赋新词强说愁",R.drawable.f040));
            lData.add(new Item("朋友3","为赋新词强说愁",R.drawable.f015));
            lData.add(new Item("朋友4","为赋新词强说愁",R.drawable.f040));
            lData.add(new Item("朋友5","为赋新词强说愁",R.drawable.f015));
            lData.add(new Item("朋友6","为赋新词强说愁",R.drawable.f040));
            lData.add(new Item("朋友7","为赋新词强说愁",R.drawable.f015));
            iData.add(lData);
            //大学组
            lData =new ArrayList<Item>();
            lData.add(new Item("朋友1","I love you ",R.drawable.f015));
            lData.add(new Item("朋友2","I love you ",R.drawable.f015));
            lData.add(new Item("朋友3","I love you ",R.drawable.f040));
            lData.add(new Item("朋友4","I love you ",R.drawable.f015));
            lData.add(new Item("朋友5","I love you ",R.drawable.f040));
            lData.add(new Item("朋友6","I love you ",R.drawable.f015));
            lData.add(new Item("朋友7","I love you ",R.drawable.f015));
            iData.add(lData);
            myAdapter = new MyBaseExpandableListAdapter(gData,iData,mContext);
            mQQlist.setAdapter(myAdapter);
    
            mQQlist.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {
                @Override
                public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {
                    Toast.makeText(mContext, "你点击了:" + iData.get(groupPosition).get(childPosition).getmName(), Toast.LENGTH_SHORT).show();
                    return true;
                }
            });
    
        }
    }
    
    
  • 相关阅读:
    Typescript 学习笔记一:介绍、安装、编译
    css 如何“画”一个抽奖转盘
    isBalanced函数实现
    链表(单向链表,双向链表)
    IDEA 插件的安装和使用
    leetCode算法------>>>>数组
    二维数组
    IDEA (2019.3) 字体编码和基本设置
    线性结构和非线性结构
    Java反射
  • 原文地址:https://www.cnblogs.com/CCCrunner/p/11781589.html
Copyright © 2011-2022 走看看