关于expanded一级二级菜单数据的分组排序
最新再弄关于expandedlistview相关的东西,所以需求是需要对一级菜单根据时间排序,同时二级菜单也需要根据时间排序,距离现在最近的时间显示在最前面。
效果就是如下:
--group2 ---2013-08-08 10:30
--msg1 --2013-08-08 10:30
--msg3 --2013-08-08 10:10
--group5 ---2013-08-08 9:30
--msgtitle --2013-08-08 9:30
--msgtitle --2013-08-08 9:10
下面代码是对MyData数据的一个排序
public List<List<MyData>> sortList(){ List<MyData> mList = new ArrayList<MyData>(); String[] titleKind = new String[]{"张三","李四","王五","张三","赵六", "王五","李四","张三","李四","王五","张三"}; for(int i=0;i<titleKind.length;i++){ MyData data = new MyData(); data.setTitle(titleKind[i]); data.setMessage(""+i); data.setDate(new Date()); mList.add(data); try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } //group List<String> titleString = new ArrayList<String>(); for(int i=0;i<mList.size();i++){ if(!titleString.contains(mList.get(i).getTitle())){ titleString.add(mList.get(i).getTitle()); } } //根据group的类别分类数据 List<List<MyData>> allList = new ArrayList<List<MyData>>(); for(int j=0;j<titleString.size();j++){ List<MyData> childList = new ArrayList<MyData>(); for(int k=0;k<mList.size();k++){ if(mList.get(k).getTitle().equals(titleString.get(j))){ childList.add(mList.get(k)); } } //对child先按时间排序,再添加到group里面 Collections.sort(childList, new Comparator<MyData>() { /** * * @param lhs * @param rhs * @return an integer < 0 if lhs is less than rhs, 0 if they are * equal, and > 0 if lhs is greater than rhs,比较数据大小时,这里比的是时间 */ @Override public int compare(MyData lhs, MyData rhs) { Date date1 = lhs.getDate(); Date date2 = rhs.getDate(); // 对日期字段进行升序,如果欲降序可采用after方法 if (date1.before(date2)) { return 1; } return -1; } }); allList.add(childList); } //group排序后的list List<MyData> temp = new ArrayList<MyData>(); for(int i=0;i<allList.size();i++) { for (int j=allList.size()-1 ;j>i;j--) { if (allList.get(i).get(0).getDate().before(allList.get(j).get(0).getDate())){ temp = allList.get(i); allList.set(i,allList.get(j)); allList.set(j,temp); } } } for(int i=0;i<allList.size();i++){ for(int j=0;j<allList.get(i).size();j++){ System.out.println(allList.get(i).get(j).getTitle()+allList.get(i).get(j).getDate().toGMTString()); } }
return allList; }
下面是MyData的数据结构
class MyData{ private String title; private String message; private Date date; public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } public Date getDate() { return date; } public void setDate(Date date) { this.date = date; } }
计算时间距离现在的一个方法如下
class TimeUtil { //时间的一个转换方法 public static Date stringToDate(String dateString) { ParsePosition position = new ParsePosition(0); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm"); Date dateValue = simpleDateFormat.parse(dateString, position); return dateValue; } public static List<MyData> timeHowLong(List<MyData> list){ Collections.sort(list, new Comparator<MyData>() { /** * * @param lhs * @param rhs * @return an integer < 0 if lhs is less than rhs, 0 if they are * equal, and > 0 if lhs is greater than rhs,比较数据大小时,这里比的是时间 */ @Override public int compare(MyData lhs, MyData rhs) { Date date1 = lhs.getDate(); Date date2 = rhs.getDate(); // 对日期字段进行升序,如果欲降序可采用after方法 if (date1.before(date2)) { return 1; } return -1; } }); Date now = new Date(System.currentTimeMillis()); for(int i=0;i<list.size();i++){ long time = now.getTime() - list.get(i).getDate().getTime(); int day=(int)(time/(24*60*60*1000)); int hour=(int)(time/(60*60*1000)-day*24); int min=(int)((time/(60*1000))-day*24*60-hour*60); Log.v("InfoCenter", "day:"+day+"hour:"+hour+"min:"+min); String formatDay= null; if((0<day)&&(day<30)){ formatDay = day+"天"+"以前"; }else if((31<day)&&(day<365)){ formatDay = (day/30)+"月"+"以前"; }else if(day>=365){ formatDay = (day/365)+"年"+"以前"; }else{ if(0<hour){ formatDay = hour+"小时"+"以前"; }else{ formatDay = min+"分"+"以前"; } } list.get(i).setDate(formatDay); } return list; } }

浙公网安备 33010602011771号