【问题标题】:Android: How to sort list items according to dates [closed]Android:如何根据日期对列表项进行排序[关闭]
【发布时间】:2013-10-24 08:19:53
【问题描述】:

我有一个列表视图,其中包含许多带有日期的列表项。我想通过日期对项目进行排序,例如日期在当前日期之后的项目应该是第一个,日期已过期的项目应该是在那之后。谁能帮忙。

【问题讨论】:

  • 您可以通过多种方式实现这一点。你试过什么?请张贴代码。
  • 这里的答案很好:stackoverflow.com/questions/5927109/…
  • Stackoverflow 本身存在很多线程。不如先自己试试。如果您遇到任何问题,请告诉我们。

标签: android


【解决方案1】:

你可以像这样使用自己的比较器

Collections.sort(yourList, new Comparator<YourObjectInYourList>() {
  public int compare(YourObjectInYourList o1, YourObjectInYourList o2) {
      if (o1.getDate() == null || o2.getDate() == null)
        return 0;
      return o1.getDate().compareTo(o2.getDate());
  }
});

【讨论】:

  • 我应该把上面的代码放在哪里?
  • 把它放在任何你想对你的列表进行排序的地方。
  • 例如,您可以使用这种方式对列表进行排序,然后将列表放入 listView 适配器。
  • 很晚很抱歉,但是当您没有日期时,然后您添加一个有日期的项目,它会使应用程序崩溃。有什么办法可以解决这个问题?
  • 我使用了日期因为有问题的项目有日期,但如果你的项目没有,那么你不能使用这段代码。但是,如果要对列表进行排序,重要的一点是列表应如何排序,例如按名称、按日期或按大小排序。你应该先决定。
【解决方案2】:
List<Date> dateList = new ArrayList<Date>();        
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy",Locale.US);    
try {
    dateList.add(sdf.parse("01/12/2013"));
    dateList.add(sdf.parse("02/11/2013"));
    dateList.add(sdf.parse("03/12/2013"));
    dateList.add(sdf.parse("04/10/2013"));
    dateList.add(sdf.parse("05/12/2013"));
    dateList.add(sdf.parse("06/12/2013"));      
    dateList.add(new Date());

    Collections.sort(dateList); 
    Comparator<Date> cmp = new Comparator<Date>() {

      @Override
      public int compare(Date o1, Date o2) {
        if(o1.getTime() > o2.getTime()) return 1;
        else if(o1.getTime() < o2.getTime()) return -1;
        else return 0;
      }             
    };

    Collator collator = Collator.getInstance();
    List<Date>  out_of_date_list = new ArrayList<Date>();
    for(Date date : dateList){
        System.out.println(">>> date = "+sdf.format(date));
        System.out.println(">>> out of date "+cmp.compare(new Date(), date));
            if(cmp.compare(date,new Date())<0){
                out_of_date_list.add(date);
            }           
    }
    System.out.println(">>> print all out of date ");           
    for(Date date : out_of_date_list){
       System.out.println(">>> date = "+sdf.format(date));      
    }               
} catch (ParseException e) {// TODO Auto-generated catch block 
    e.printStackTrace();        
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-29
    • 2020-07-02
    • 1970-01-01
    • 1970-01-01
    • 2014-02-05
    • 1970-01-01
    • 2012-09-29
    • 1970-01-01
    相关资源
    最近更新 更多