You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在给定的Android代码中按时间对ListView进行排序?

当然可以实现!

你的需求是让ListView里的时间按从早到晚排序(比如19:15排在20:30前面),基于你给出的代码片段,我们可以根据时间字符串的格式选择对应的实现方式:


情况1:时间字符串是标准的HH:mm格式(24小时制,两位小时+两位分钟)

这种情况下直接用Collections.sort()就完全够用!因为HH:mm格式的字符串字典序和时间顺序完全一致(比如"19:15"的字符顺序比"20:30"小,排序后自然会排在前面)。

你可以直接完善现有代码:

@Override 
public void onDataChange(DataSnapshot dataSnapshot) { 
    List<String> listTime = new ArrayList<String>(); 
    // 先从DataSnapshot里把时间数据填充到listTime中
    for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
        String time = snapshot.getValue(String.class);
        listTime.add(time);
    }
    // 默认排序即可实现时间从早到晚
    Collections.sort(listTime); 
    // 初始化ArrayAdapter并绑定排序后的时间列表
    ArrayAdapter<String> adapter = new ArrayAdapter<>(getApplicationContext(), 
            android.R.layout.simple_list_item_1, listTime);
    // 把adapter设置给你的ListView
    yourListView.setAdapter(adapter);
}

情况2:时间字符串不是标准HH:mm格式(比如12小时制带AM/PM、小时是一位数等)

如果你的时间格式是7:15 PM、9:30 AM这类,默认字符串排序就会出错,这时候需要自定义一个Comparator,把字符串转换成时间对象再比较:

方案1(Java 8+ / Android API 26+):用LocalTime解析

@Override 
public void onDataChange(DataSnapshot dataSnapshot) { 
    List<String> listTime = new ArrayList<String>(); 
    // 先填充时间数据
    for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
        String time = snapshot.getValue(String.class);
        listTime.add(time);
    }
    // 自定义比较器,这里假设时间格式是"hh:mm a"(比如"07:15 PM")
    Collections.sort(listTime, new Comparator<String>() {
        @Override
        public int compare(String time1, String time2) {
            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("hh:mm a");
            LocalTime t1 = LocalTime.parse(time1, formatter);
            LocalTime t2 = LocalTime.parse(time2, formatter);
            return t1.compareTo(t2);
        }
    }); 
    // 绑定adapter到ListView
    ArrayAdapter<String> adapter = new ArrayAdapter<>(getApplicationContext(), 
            android.R.layout.simple_list_item_1, listTime);
    yourListView.setAdapter(adapter);
}

方案2(兼容低版本Android):用SimpleDateFormat解析

@Override 
public void onDataChange(DataSnapshot dataSnapshot) { 
    List<String> listTime = new ArrayList<String>(); 
    // 先填充时间数据
    for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
        String time = snapshot.getValue(String.class);
        listTime.add(time);
    }
    // 自定义比较器
    Collections.sort(listTime, new Comparator<String>() {
        @Override
        public int compare(String time1, String time2) {
            SimpleDateFormat sdf = new SimpleDateFormat("hh:mm a", Locale.US);
            try {
                Date dt1 = sdf.parse(time1);
                Date dt2 = sdf.parse(time2);
                return dt1.compareTo(dt2);
            } catch (ParseException e) {
                e.printStackTrace();
                return 0;
            }
        }
    }); 
    // 绑定adapter到ListView
    ArrayAdapter<String> adapter = new ArrayAdapter<>(getApplicationContext(), 
            android.R.layout.simple_list_item_1, listTime);
    yourListView.setAdapter(adapter);
}

最后要注意:一定要确保listTime在排序前已经正确填充了从DataSnapshot获取的时间数据,再把排序后的列表传给ArrayAdapter,就能实现ListView按时间从早到晚排序啦!

内容的提问来源于stack exchange,提问作者bwen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:40:49