Android中怎么实现二级菜单展示
创始人
2024-12-22 14:00:25
0次

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

child_item.xml

效果如下图所示:

2. 其次,设置分组item

groupitem.xml

效果下图所示:

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 gData; //分组 private ArrayList> iData; //长链表 private Context mContext; public MyBaseExpandableListAdapter(ArrayList gData, ArrayList> 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 gData = null; //存储所有的分组信息 private ArrayList> iData = null; //每个分组的子信息 private ArrayList 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(); iData = new ArrayList>(); 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(); //小学组 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(); 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(); 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(); 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;  } }); }}

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...