关于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;
    }
}  

 

posted @ 2013-08-07 12:55  我叫大大  阅读(329)  评论(0)    收藏  举报