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

看这些代码,最主要的是我在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();}}});
}

ExpandableList的使用相关推荐

  1. 控件(View)之TextSwitcher, Gallery, ImageSwitcher, GridView, ListView, ExpandableList【转】

    在 Android 中使用各种控件(View) TextSwitcher - 文字转换器控件(改变文字时增加一些动画效果) Gallery - 缩略图浏览器控件 ImageSwitcher - 图片转 ...

  2. Android中 ExpandableList的使用2

    Android中ExpandableList的使用2 本文介绍Android中ExpandableList的使用,在前文的基础上作了很多改进,增加了增加.删除.回调等功能. 图中的 "第一行 ...

  3. 可折叠列表ExpandableList

    ExpandableList就是可展开的ListView 首先我们来看一下页面的布局 expandlist_layout.xml文件 <RelativeLayout xmlns:android= ...

  4. Android常用控件之ExpandableList的使用

    先来看下什么是ExpandableListView 跟列表有点像,这种是可以折叠的列表,下面来看下是如何在代码中实现 一.在布局文件中声明一个ExpandableListView <Linear ...

  5. android 二级折叠列表,Android折叠列表 ExpandableList

    ExpandableList 是折叠列表,通过继承ExpandableListActivity 类就可以非常简单的实现折叠列表. 效果图: 代码实现 package com.zhou.activity ...

  6. android 展开菜单,Android之可收缩展开列表ExpandableList

    在Android的app包中,有这么一个类,这个类继承自Activity,它叫ExpandableListActivity.顾名思义,从它的名字可以看出该类是一种可扩展性的列表List,我们这里理解成 ...

  7. Android ExpandableList扩展用法

    1.简介 基于基于BaseExpandableListAdapter扩展的ExpandableList用法,现在网上流行的主要有两种:第一种是向BaseExpandableListAdapter传入两 ...

  8. ExpandableList扩展用法

    1.简介 基于BaseExpandableListAdapter扩展的ExpandableList用法,现在网上流行的主要有两种:第一种是向BaseExpandableListAdapter传入两个数 ...

  9. ExpandableList自定义动画效果

    项目中使用ExpandableList,要求分组展开时显示一个动画, 问题: 动画效果位于GroupView上,适配器中getGroupView方法通过判断当前项是点击的分组, 然后进行展开和收起的动 ...

  10. RN如何实现一个ExpandableList(可展开列表)组件

    前言 今天想跟大家分享一个用RN实现的组件 - ExpandableList.恩,没什么特殊的原因,只是因为最近有一个需求要用到这东西,而且RN没有提供现成的组件,所以很(不)开(得)心(已)地做了一 ...

最新文章

  1. 服务器BMC、BIOS、IPMI、UEFI技术解析
  2. Opengl-基本概念-着色器(都是固定的)
  3. VTK:vtkActor2D用法实战
  4. 40条提升编程技能的小妙招
  5. CodeForces - 1368D AND, OR and square sum(位运算+贪心)
  6. Wannafly挑战赛22 B 字符路径 ( 拓扑排序+dp )
  7. 【操作系统】信号量的用法
  8. 《分析服务从入门到精通读书笔记》第四章、创建父子维度(7)
  9. tensorflow contrib模块_OpenCV DNN 模块-风格迁移
  10. (原創) 如何在Ubuntu上啟動ADSL連線? (OS) (Linux) (Ubuntu)
  11. 软件工程毕设项目 - 基于SSM的房屋租赁系统(含源码+论文)
  12. python 爬虫 微博 github_GitHub - berluo/weiboSpider-1: 新浪微博爬虫,用python爬取新浪微博数据...
  13. cocos creator之自定义事件
  14. ECshop商品详情页显示可赠送积分和购买使用金额积分
  15. 植物大战僵尸对战版(Android)
  16. VC/MFC如何设置对话框、static背景颜色
  17. flash游戏教程集锦~~
  18. 火星转债上市价格预测
  19. iOS开发支付集成之支付宝支付
  20. matlab牛顿法求区间根程序,MATLAB用二分法、不动点迭代法及Newton迭代(切线)法求非线性方程的根...

热门文章

  1. Keka for Mac (优秀的压缩解压缩工具) v1.2.50
  2. bootstrap 英文日历_bootstrap日历插件DateRangePicker的使用
  3. cuckoo沙箱踩坑和填坑记录
  4. vue14 动画-自学视频
  5. 在Python中优雅的格式化字符串的两种方式
  6. 补水黑科技 绿洲AirWater A3加湿器正式发布
  7. pythoncad二次开发视频_revit二次开发|bim软件二次开发|revit二次开发教程|Revit二次开发技术文档...
  8. 将python项目文件加密
  9. 2020 PyQt5控件内置信号与函数汇总(1):QLineEdit内置信号与函数
  10. 【操作日志11.19】【原创】技术分析之主力筹码加跳空高开