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


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















