Android imitation QQ grouping to achieve secondary menu display

This example shares the specific code of Android imitation QQ grouping to realize the secondary menu display for your reference. The specific contents are as follows

First, show the effect to be achieved

See the link for dynamic view

1. First define the item, that is, the item displayed at level 2

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>

The effect is shown in the following figure:

2. Next, set the grouped 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>

The effect is shown in the following figure:

3. Create corresponding data objects

Add group parent menu 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. Add submenu 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. Add adapter

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,ViewGroup viewGroup) {
 ViewHolderItem itemHolder;
 if (view == null){
  view = LayoutInflater.from(mContext).inflate(R.layout.child_item,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. Fill data in 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.f040));
 lData.add(new Item("朋友4",R.drawable.f015));
 lData.add(new Item("朋友5",R.drawable.f040));
 lData.add(new Item("朋友6",R.drawable.f040));
 iData.add(lData);
 //高中组
 lData =new ArrayList<Item>();
 lData.add(new Item("朋友1","为赋新词强说愁",R.drawable.f040));
 lData.add(new Item("朋友3",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));
 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;
  }
 });

 }
}

The above is the whole content of this article. I hope it will help you in your study, and I hope you will support us a lot.

The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>