ExpandableList的使用

article/2025/11/4 16:00:45

首先,我们把一二级选择的对应的类写好。

看这些代码,最主要的是我在ParentStrings中写了一个List<ChildrenStrings>的一个方法,以便之后ChildrenStrings的存储和调用

下面是BusAdapter继承BaseExpandableAdapter

public class BusAdapter extends BaseExpandableListAdapter {private List<ParentStrings> list;private Context context;public BusAdapter(Context context,List<ParentStrings> list){this.context = context;this.list=list;}@Overridepublic int getGroupCount() {return list.size();  //返回一级菜单的个数}@Overridepublic int getChildrenCount(int i) {return list.get(i).getList().size();//返回二级菜单的个数}@Overridepublic Object getGroup(int i) {return list.get(i);//返回一级菜单的数据}@Overridepublic Object getChild(int i, int i1) {return list.get(i).getList().get(i1);//返回二级菜单的数据}@Overridepublic long getGroupId(int i) {//返回分组的IDreturn i;}@Overridepublic long getChildId(int i, int i1) {//返回分组的IDreturn i1;}@Overridepublic boolean hasStableIds() {return true;//这里为true}@Overridepublic View getGroupView(int i, boolean b, View convertView, ViewGroup viewGroup) {GroupViewHolder viewHolder;if (convertView==null){convertView = LayoutInflater.from(context).inflate(R.layout.bus_fragment_parent,null);viewHolder = new GroupViewHolder();viewHolder.tvStation = convertView.findViewById(R.id.tvStation);convertView.setTag(viewHolder);}else{viewHolder = (GroupViewHolder) convertView.getTag();}viewHolder.tvStation.setText("\t\t"+list.get(i).getStation());return convertView;}class GroupViewHolder{TextView tvStation;}@Overridepublic View getChildView(int i, int i1, boolean b, View convertView, ViewGroup viewGroup) {View view;ChildrenViewHolder viewHolder;if (convertView==null){convertView = LayoutInflater.from(context).inflate(R.layout.bus_fragment_children,null);viewHolder  =new ChildrenViewHolder();viewHolder.ivbus = convertView.findViewById(R.id.ivBus);viewHolder.tvNumber = convertView.findViewById(R.id.tvNumber);viewHolder.tvArriveTime = convertView.findViewById(R.id.tvArriveTime);viewHolder.tvDistance = convertView.findViewById(R.id.tvDistance);convertView.setTag(viewHolder);}else{viewHolder = (ChildrenViewHolder) convertView.getTag();}viewHolder.ivbus.setImageResource(R.drawable.bus2);viewHolder.tvNumber.setText(list.get(i).getList().get(i1).getId()+"号\t(18)人  ");  //这里是关键,通过一级菜单类的方法来获取二级菜单的方法viewHolder.tvArriveTime.setText(list.get(i).getList().get(i1).getMinutes()+"分钟后到达");viewHolder.tvDistance.setText("距离站台"+list.get(i).getList().get(i1).getDistance()+"米");return convertView;}class ChildrenViewHolder{ImageView ivbus;TextView tvNumber;TextView tvArriveTime;TextView tvDistance;}@Overridepublic boolean isChildSelectable(int i, int i1) {return true;}}

下面是最后的部分了BusFragment

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {// Inflate the layout for this fragmentView view = inflater.inflate(R.layout.bus_fragment, container, false);expandList = (ExpandableListView) view.findViewById(R.id.expand_list);
}
@Override
public void onStart() {super.onStart();timer = new Timer();task = new TimerTask() {@Overridepublic void run() {getActivity().runOnUiThread(new Runnable() {@Overridepublic void run() {getDistance(1);//顺便这里介绍一下定时器}});}};timer.schedule(task, 0, 3000);
}@Override
public void onPause() {super.onPause();if (timer != null) {timer.cancel();}if (task != null) {task.cancel();}timer = null;task = null;
}
/**
*json解析接口中的数据
*/
public void getDistance(final int BusStationId) {String url = HttpUtil.URL + "GetBusStationInfo.do";String json = "{\"BusStationId\":" + BusStationId + ",\"UserName\":\"user1\"}";RequestBody body = RequestBody.create(HttpUtil.JSON, json);HttpUtil.postRequest(url, body, new Callback() {@Overridepublic void onFailure(Call call, IOException e) {Log.d("student1", "获取车站信息失败");}@Overridepublic void onResponse(Call call, Response response) throws IOException {String result = response.body().string();Log.d("student1", result);setDistance(BusStationId, result);if (BusStationId < 2) {getDistance(BusStationId + 1);}}});
}private void setDistance(final int BusStationId, final String result) {getActivity().runOnUiThread(new Runnable() {@Overridepublic void run() {try {JSONObject jsonObject = new JSONObject(result);String content = jsonObject.getString("ROWS_DETAIL");JSONArray array = new JSONArray(content);if (BusStationId == 1) {if (list1.size() != 0) {list1.clear();}for (int i = 0; i < array.length(); i++) {JSONObject object = array.getJSONObject(i);int distance = object.getInt("Distance");int busId = object.getInt("BusId");double time = distance / (1000 / 3);DecimalFormat df = new DecimalFormat("#");ChildrenStrings childrenStrings = new ChildrenStrings(busId, Integer.parseInt(df.format(time)), distance);list1.add(childrenStrings);}//排序Collections.sort(list1, new Comparator<ChildrenStrings>() {@Overridepublic int compare(ChildrenStrings t, ChildrenStrings t1) {if (t.getDistance() > t1.getDistance()) {return 1;} else {return -1;}}});ParentStrings parentStrings = new ParentStrings("中医院站", list1);if (list.size()!=0){list.clear();}list.add(parentStrings);} else if (BusStationId == 2) {if (list2.size() != 0) {list2.clear();}for (int i = 0; i < array.length(); i++) {JSONObject object = array.getJSONObject(i);int distance = object.getInt("Distance");int busId = object.getInt("BusId");double time = distance / (1000 / 3);DecimalFormat df = new DecimalFormat("#");ChildrenStrings childrenStrings = new ChildrenStrings(busId, Integer.parseInt(df.format(time)), distance);list2.add(childrenStrings);}Collections.sort(list2, new Comparator<ChildrenStrings>() {@Overridepublic int compare(ChildrenStrings t, ChildrenStrings t1) {if (t.getDistance() > t1.getDistance()) {return 1;} else {return -1;}}});ParentStrings parentStrings = new ParentStrings("联想大厦站", list2);list.add(parentStrings);adapter = new BusAdapter(getContext(), list);expandList.setAdapter(adapter);//进入界面默认展开二级菜单int count = adapter.getGroupCount();for (int i = 0; i < count; i++) {expandList.expandGroup(i);}//关于二级菜单的刷新,一定要理清自己代码的逻辑,再setAdapter}} catch (JSONException e) {e.printStackTrace();}}});
}

 

 


http://chatgpt.dhexx.cn/article/3P6b6NQq.shtml

相关文章

可折叠列表ExpandableList

ExpandableList就是可展开的ListView 首先我们来看一下页面的布局 expandlist_layout.xml文件 <RelativeLayoutxmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"http://schemas.android.com/apk/res-auto"xmlns:tools"htt…

Adapter类控件使用之ExpandableList(可折叠式列表)的基本使用

(一)概述 本节要讲解的Adapter类控件是ExpandableListView,就是可折叠的列表,它是 ListView的子类, 在ListView的基础上它把应用中的列表项分为几组,每组里又可包含多个列表项。至于 样子, 类似于QQ联系人列表,他的用法与ListView非常相似,只是ExpandableListViv…

如果在临汾遇见你

哈 如果在临汾遇见你&#xff0c;那么&#xff0c;我们一定要去平阳南街煤化巷口的宾库西餐厅&#xff0c;坐在只需消费15块钱就可以坐一整天的大厅散座上&#xff0c;聊着我们相见恨晚的话题。 如果在临汾遇见你&#xff0c;那么&#xff0c;我们一定要去传说的尧庙&#xff0…

吃完7家互联网大厂食堂,我回去就把老板开了

本文转载自 超人测评 不会还有人不知道&#xff08;中文&#xff09;字节跳动&#xff08;英文&#xff09;Bytedance的工牌&#xff0c;已经成为年轻人的社交货币了吧。 有人说它是“相亲市场的硬通货”&#xff0c;也有人将它称为“2021年最潮流时尚单品”。每当你在奶茶店…

围剿宏光MINI

NEW 关注Tech逆向思维视频号 最新视频→【做核酸&#xff1f;打疫苗&#xff1f;3分钟假期安全出行攻略】 出品&#xff5c;深途 文&#xff5c;黎明 编辑&#xff5c; 魏佳 有很长一段时间&#xff0c;汽车企业的老板和投资人&#xff0c;都热衷于造“大车”。蔚来、小鹏、威马…

《植物大战僵尸》的12个成功秘诀

口述 / James Gwertzman 整理 / 杨东杰 [caption id"attachment_6675" align"alignleft" width"263" caption"James Gwertzman PopCap亚太区总裁"] [/caption] 4月28日&#xff0c;在由长城会和CSDN联合主办的“开发者星球——TUP大…

只要10分钟,搭建属于个人的炫酷网站,你还在犹豫什么?

&#x1f482; 个人主页: IT学习日记&#x1f91f; 版权: 本文由【IT学习日记】原创、在CSDN首发、需要转载请联系博主&#x1f4ac; 如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)和订阅专栏哦&#x1f485; 想寻找共同成长的小伙伴&#xff0c;请点击【技术圈子】 文章…

我的股票投资原则:专注业绩好、看得懂的消费品行业

本文概要&#xff1a;文以载道。总结了过往的经验教训&#xff0c;明确了未来的投资方向和股票投资圈。 我是一名Java程序员&#xff0c;今年心情有点烦躁&#xff0c;没怎么有耐心写工作之外的代码。 同时&#xff0c;我也是一名业余投资人&#xff0c;所以今年就又花了大量…

最近回了趟家,随便拍的照片

先贴下家对面的东山。呵呵。看上去光秃秃的。不过我看上去只有很深的亲切。 家里盖被子的东西 我大哥房间里面别人送的&#xff0d;&#xff0d;&#xff0d;堆绣  是我们湟中的一种农民搞的艺术品 家里的酸奶。  呵呵&#xff0c;大家很多人都记得西宁街头的那种勺子挖着…

破解网址_中国目前的破解组织大全

中国目前的破解组织大全&#xff08;2009版&#xff09;——[TFW]find31作品 管理提醒&#xff1a; 本帖被 朕很伤心 从 『 风云AD区 』 移动到本区(2009-06-23) 破解组织前管理员告诉你中国目前的破解组织现状——看了某个N年前的帖子而发&#xff0c;说实话我真的不忍心再看…

推荐 10 个不错的网络监视工具

点击上方“民工哥技术之路”选择“置顶或星标” 每天10点为你分享不一样的干货 有几个网络监视工具可以用于不同的操作系统。在这篇文章中&#xff0c;我们将讨论从 Linux 终端中运行的 10 个网络监视工具。 它对不使用 GUI 而希望通过 SSH 来保持对网络管理的用户来说是非常理…

【Java】Socket网络编程实现内网穿透、端口映射转发、内网穿透上网工具的编写,设置IP白名单防火墙

这里写目录标题 简介更新 一、背景1.1 情景假设1.2 想要达到的目的1.3 局限1.3 解决方案一&#xff08;路由器NAT&#xff09;1.4 解决方案二&#xff08;云服务器转发&#xff09; 二、方案介绍2.1 方案简介2.2 具体流程2.3 编程要点2.4 关于web管理IP白名单的更新2.5 关于soc…

计算机网络--Windows网络测试工具

实验目的 理解上述知识点所涉及的基本概念并学会使用这些工具测试网络的状态及从网上获取信息。 实验环境 安装了TCP/IP协议的Windows系统&#xff0c;包含实用的网络工具。 实验内容 完成下列要求&#xff0c;并记录实验步骤和结果 1、 检测本机的MAC地址 2、 检测本机网…

【小工具的制作】制作一个通过HTTP请求来实现上网认证的自动登录小工具

目录 1. 前言2. 分析3. 编码3.1 Python版3.1.1 编写Python脚本3.1.2 下载Python转EXE程序工具3.1.3 打包成EXE程序 3.2 Java版3.2.1 编写代码 4. 最后一步5. 总结 1. 前言 由于学校机房联网时&#xff0c;总是需要登录个人账号。为实现快速登录&#xff0c;我们就此问题给出了自…

常见的网络抓包工具推荐

因为发现好多人想抓包&#xff0c;但是不知道有哪些工具&#xff0c;今天我给大家推荐几款抓包工具&#xff0c;希望对大家有所帮助。 网络抓包工具的用途 网络抓包工具的主要功能是将网络执行的过程&#xff0c;详细的记录下来。如果你是一个程序员&#xff0c;肯定对网络抓…

【转】Fiddler抓包工具手机添加代理后连不上网解决办法

转载&#xff1a;Fiddler抓包工具手机添加代理后连不上网解决办法_数据结构和算法的博客-CSDN博客 最近&#xff0c;在工作中需要测试一个监控网络请求的SDK&#xff0c;需要校验该SDK记录的耗时数据的准确性。根据网上大神们提供的工作经验&#xff0c;可以利用Fiddler工具给…

超好用的网络小工具

整理了一下一些自己使用的网络链路状态测试工具。 一、RAWCAP-本地回路抓包 本地使用wireshark无法抓回路包&#xff0c;为此百度了一下RawCap可以抓回路包&#xff0c;亲测可用。特记录下来。 缺点&#xff1a;有一些系统需要安装Microsoft .NET Framework 4 https://www.m…

8大轻型网管工具,网络管理好帮手

从设备发现到系统、网络和流量可视性&#xff0c;这些轻型的网管工具非常实用。在网络和服务器世界&#xff0c;重点是可视性、可视性、可视性&#xff0c;如果你不知道你的网络和服务器在每天每秒正在做什么&#xff0c;你很可能会出问题。幸运的是&#xff0c;这里有很多好工…

上网本之必备网络工具推荐

伴随着中国3G无线网络的全面商用运营&#xff0c;“上网本”已经成为2009年最炙手可热的词汇之一。“上网本”便宜实惠、小巧便携&#xff0c;但低配置却是它的一个软肋&#xff0c;所以能够完全配合“上网本”使用的低耗能软件似乎并不多。这里&#xff0c;笔者结合自己的一些…

网络测速工具

一、Speedtest测试外网网速 Speedtest是用来测试网络性能的开源软件&#xff0c;在Linux下面安装Speedtest可以用来测试网络出口的上传和下载速度&#xff0c;帮助排查网络方面导致的故障。 官网&#xff1a; Github链接&#xff1a;https://github.com/sivel/speedtest-cli …