Android : ExpandableListView(折叠列表) +BaseExpandableListAdapter-简单应用

示例图:

实体类DemoData.java

package com.example.myexpandablelistview.entity;public class DemoData {private  String content;private int img;public DemoData(String content, int img) {this.content = content;this.img = img;}public String getContent() {return content;}public void setContent(String content) {this.content = content;}public int getImg() {return img;}public void setImg(int img) {this.img = img;}
}

适配器 写个类继承 BaseExpandableListAdapter

package com.example.myexpandablelistview;import android.content.Context;
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.myexpandablelistview.entity.DemoData;import java.util.ArrayList;
import java.util.List;// BaseAdapter 扩展
public class DemoExpandableListadpter extends BaseExpandableListAdapter {private List<String> groupDataList ;private List<ArrayList<DemoData>> itemDataList;private Context context;//优化static class HolderGroup{TextView titleTextView;}static class HolderChild{TextView contTextView;ImageView imageView;}public DemoExpandableListadpter(List<String> groupDataList, List<ArrayList<DemoData>> itemDataList, Context context) {this.groupDataList = groupDataList;this.itemDataList = itemDataList;this.context = context;}@Overridepublic int getGroupCount() {//返回 外面组个数 3个return groupDataList.size();}@Overridepublic int getChildrenCount(int groupPosition) {//groupPosition 外面组的下标 在获取里面子列表// 里面子列表个数return itemDataList.get(groupPosition).size();}@Overridepublic Object getGroup(int groupPosition) {//返回组每一项对应的数据return groupDataList.get(groupPosition);}@Overridepublic Object getChild(int groupPosition, int childPosition) {// 先获取对应的组下标,在获取子列表数据//返回子列表的每一项对应的数据return itemDataList.get(groupPosition).get(childPosition);}@Overridepublic long getGroupId(int groupPosition) {return groupPosition;}@Overridepublic long getChildId(int groupPosition, int childPosition) {return childPosition;}@Overridepublic boolean hasStableIds() {return false;}@Overridepublic View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {//组布局View 外面的HolderGroup  holderGroup = null;if(holderGroup == null){holderGroup = new HolderGroup();//设置视图布局convertView = LayoutInflater.from(context).inflate(R.layout.group_view,parent,false);holderGroup.titleTextView = convertView.findViewById(R.id.btn_title);convertView.setTag(holderGroup);}else {holderGroup = (HolderGroup) convertView.getTag();}//设置值holderGroup.titleTextView.setText(groupDataList.get(groupPosition));return convertView;}@Overridepublic View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {//里面的子布局HolderChild holderChild =null;if(holderChild == null){holderChild = new HolderChild();//设置视图布局convertView = LayoutInflater.from(context).inflate(R.layout.child_view,parent,false);holderChild.imageView = convertView.findViewById(R.id.btn_img);holderChild.contTextView = convertView.findViewById(R.id.btn_cont);convertView.setTag(holderChild);}else {holderChild = (HolderChild)convertView.getTag();}//设置值holderChild.imageView.setBackgroundResource(itemDataList.get(groupPosition).get(childPosition).getImg());holderChild.contTextView.setText(itemDataList.get(groupPosition).get(childPosition).getContent());return convertView;}//设置子列是否可以选中 true  false@Overridepublic boolean isChildSelectable(int groupPosition, int childPosition) {//false 点击事件无效return true;}
}

MainAcitvity.java

package com.example.myexpandablelistview;import androidx.appcompat.app.AppCompatActivity;import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.widget.ExpandableListView;
import android.widget.Toast;import com.example.myexpandablelistview.entity.DemoData;import java.util.ArrayList;
import java.util.List;public class MainActivity extends AppCompatActivity {//定义组件private ExpandableListView expandableListView;private Context context;private List<String> groupDataList = null;private List<ArrayList<DemoData>> itemDataList = null;private ArrayList<DemoData> itemData =null;//定义图片资源图片private int[] arr = {R.mipmap.e,R.mipmap.f,R.mipmap.g,R.mipmap.h,R.mipmap.i,};private int[] arr2 = {R.mipmap.g,R.mipmap.h,R.mipmap.i,};/*实现ExpandableAdapter的三种方式1.扩展BaseExpandableListAdpter实现ExpandableAdapter。2.使用SimpleExpandableListAdpater将两个List集合包装成ExpandableAdapter3.使用simpleCursorTreeAdapter将Cursor中的数据包装成SimpleCuroTreeAdapter使用的是第一个,扩展BaseExpandableListAdpter,我们需要重写该类中的相关方法*/private DemoExpandableListadpter demoExpandableListadpter = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//传入上下文context = this;expandableListView = findViewById(R.id.expandable_list_view);//添加数据itemDataList = new ArrayList<ArrayList<DemoData>>();groupDataList = new ArrayList<>();for(int i = 0;i < 3; i++){groupDataList.add("我是标题"+i);}//内容 和图片 1 循环添加出错 java.lang.IndexOutOfBoundsExceptionitemData = new ArrayList<DemoData>();for (int i =0 ; i< arr.length; i++){itemData.add(new DemoData("我是文字"+i,arr[i]));}itemDataList.add(itemData);//内容 和图片 2itemData = new ArrayList<DemoData>();for (int i =0 ; i< arr2.length; i++){itemData.add(new DemoData("我是文字"+i,arr2[i]));}itemDataList.add(itemData);//内容 和图片 3itemData = new ArrayList<DemoData>();for (int i =0 ; i< arr.length; i++){itemData.add(new DemoData("我是文字"+i,arr[i]));}itemDataList.add(itemData);//把数据传入demoExpandableListadpter = new DemoExpandableListadpter(groupDataList,itemDataList,context);//往视图容器中添加 适配器expandableListView.setAdapter(demoExpandableListadpter);//列表设置点击事件expandableListView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {@Overridepublic boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {Toast.makeText(context,"您选择了"+itemDataList.get(groupPosition).get(childPosition).getContent(),Toast.LENGTH_SHORT).show();return false;}});}
}

主布局:activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><ExpandableListViewandroid:id="@+id/expandable_list_view"android:layout_width="match_parent"android:layout_height="match_parent"/></LinearLayout>

组布局 group_view.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:orientation="vertical"android:layout_height="match_parent"><TextViewandroid:id="@+id/btn_title"android:layout_width="match_parent"android:layout_height="wrap_content"android:textSize="30sp"android:textStyle="bold"android:paddingLeft="50dp"android:text="123"/>
</LinearLayout>

子布局 child_view.xml

<?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"><ImageViewandroid:id="@+id/btn_img"android:layout_width="60dp"android:layout_height="60dp"/><TextViewandroid:textSize="24sp"android:id="@+id/btn_cont"android:layout_width="match_parent"android:layout_height="60dp"android:gravity="center_vertical"android:text="1234"/></LinearLayout>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/213135.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VL06O报表添加增强字段

业务描述 用户需要在VL06O事务代码下进行批量交货过账&#xff0c;现有的筛选条件不太适用当前公司的业务&#xff0c;需要在报表中新增三个交货单增强字段&#xff0c;方便其筛选&#xff08;选择屏幕没有加&#xff0c;用户在报表里用标准按钮功能自己筛选&#xff09; 效果…

Redis集群环境各节点无法互相发现与Hash槽分配异常 CLUSTERDOWN Hash slot not served的解决方式

原创/朱季谦 在搭建Redis5.x版本的集群环境曾出现各节点无法互相发现与Hash槽分配异常 CLUSTERDOWN Hash slot not served的情况&#xff0c;故而把解决方式记录下来。 在以下三台虚拟机机器搭建Redis集群—— 192.168.200.160192.168.200.161192.168.200.162启动三台Redis集…

python连接并简单操作SQL server数据库

环境&#xff1a; pycharm 、SQLserver版本2019 1.首先&#xff0c;在pycharm中点击File&#xff0c;找到setting——project&#xff1a;***&#xff0c;点击”“&#xff0c;引入pymssql库 2.编写代码连接数据库&#xff0c;并对数据库进行查询等简单操作&#xff08;此处仅…

C#,数值计算——多项式插值与外推插值(Poly2D_interp)的计算方法与源程序

1 文本格式 using System; namespace Legalsoft.Truffer { /// <summary> /// Object for two-dimensional polynomial interpolation on a matrix.Construct /// with a vector of x1 values, a vector of x2 values, a matrix of tabulated /// func…

代码随想录算法训练营第五十二天|1143.最长公共子序列 1035.不相交的线 53. 最大子序和

文档讲解&#xff1a;代码随想录 视频讲解&#xff1a;代码随想录B站账号 状态&#xff1a;看了视频题解和文章解析后做出来了 1143.最长公共子序列 class Solution:def longestCommonSubsequence(self, text1: str, text2: str) -> int:dp [[0] * (len(text2) 1) for _ i…

LeetCode | 622. 设计循环队列

LeetCode | 622. 设计循环队列 OJ链接 思路&#xff1a; 我们这里有一个思路&#xff1a; 插入数据&#xff0c;bank往后走 删除数据&#xff0c;front往前走 再插入数据&#xff0c;就循环了 那上面这个方法可行吗&#xff1f; 怎么判断满&#xff0c;怎么判断空&#xff1…

yolov5s模型剪枝详细过程(v6.0)

本文参考github上大神的开源剪枝项目进行学习与分享&#xff0c;具体链接放在文后&#xff0c;希望与大家多多交流&#xff01; 一、原模型训练 在官方源码上训练yolov5模型&#xff0c;支持v6.0分支的n/s/m/l模型&#xff0c;我这里使用的是v5s&#xff0c;得到后将项目clone到…

我去图书馆微信公众号抢座【Python版本】

更新记录 介于大部分是小白这里就重新整理一下思路 直接跳第十次更新&#xff01;第一次更新 抓包抢座2023-4-28日第二次更新&#xff08;更新了指定时间抢座 加了时间戳&#xff09;2023-5-9日第三次更新&#xff08;更新了延迟时间 测试成功案例&#xff09;2023-5-31日第四次…

如何将本地websocket发布至公网并实现远程访问?

本地websocket服务端暴露至公网访问【cpolar内网穿透】 文章目录 本地websocket服务端暴露至公网访问【cpolar内网穿透】1. Java 服务端demo环境2. 在pom文件引入第三包封装的netty框架maven坐标3. 创建服务端,以接口模式调用,方便外部调用4. 启动服务,出现以下信息表示启动成功…

2023年第十六届中国系统架构师大会(SACC2023)-核心PPT资料下载

一、峰会简介 本届大会以“数字转型 架构演进”为主题&#xff0c; 涵盖多个热门领域&#xff0c;如多云多活、海量分布式存储、容器、云成本、AIGC大数据等&#xff0c;同时还关注系统架构在各个行业中的应用&#xff0c;如金融、制造业、互联网、教育等。 与往届相比&#…

15.Python 异常处理和程序调试

1. 异常处理 异常就是在程序执行过程中发生的超出预期的事件。一般情况下&#xff0c;当程序无法正常执行时&#xff0c;都会抛出异常。 在开发过程中&#xff0c;由于疏忽或考虑不周&#xff0c;出现的设计错误。因此&#xff0c;在后期程序调试中应该根据错误信息&#xff…

2022版 的IDEA创建一个maven项目(超详细)

一.设置idea中指定的maven的位置以及本地存储仓库 开发中一般我们使用自己下载的maven&#xff0c;不使用IDEA工具自带的&#xff0c;这就需要将我们下载的maven配置到IDEA工具中&#xff0c;配置如下图所示&#xff1a; 或者直接 快捷键 CtrlAltS 直接进入设置 maven home pa…