前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android仿QQ分组实现二级菜单展示

Android仿QQ分组实现二级菜单展示

作者头像
砸漏
发布2020-10-16 11:05:05
1K0
发布2020-10-16 11:05:05
举报
文章被收录于专栏:恩蓝脚本

本文实例为大家分享了Android仿QQ分组实现二级菜单展示的具体代码,供大家参考,具体内容如下

首先展示下要实现的效果

动态查看请看链接

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

child_item.xml

代码语言:javascript
复制
<?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

代码语言:javascript
复制
<?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

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
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;
}
});
}
}

以上就是本文的全部内容,希望对大家的学习有所帮助。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-09-11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档