android – 如何在可扩展列表中指定子项的排序顺序?

我正在开发一个会议应用程序,我们希望会话首先按时间分组,然后按房间位置分组.我已经成功地在我的ExpandableListActivity中按一个或另一个排序,但是对主要和次要排序都没有成功.

conference application that displays the sessions first grouped by time and then by room location http://coreylatislaw.com/wp-content/uploads/2012/03/sort-issue.png

建立

>自定义内容提供程序(扩展ContentProvider)
>自定义列表适配器(扩展Baseexpandablelistadapter)
>自定义列表活动(扩展ExpandableListActivity)

询问

Cursor cursor = context.getContentResolver()
                           .query(uri,ScheduleData.PROJECTION,null,ScheduleData.soRT_ORDER);

排序

public static final String SORT_ORDER = TimeSlots.QUALIFIED_TIMESTART + " ASC"; // timeslots.timestart

失败的主要&二级排序

public static final String SORT_ORDER = TimeSlots.QUALIFIED_TIMESTART + " ASC," + Locations.QUALIFIED_NAME + " ASC"; // timeslots.timestart ASC,locations.name ASC
    public static final String SORT_ORDER = TimeSlots.QUALIFIED_TIMESTART + "," + Locations.QUALIFIED_NAME + " ASC";     // timeslots.timestart,locations.name ASC

第二个条款似乎对排序没有影响.这是ExpandableListActivity的限制吗?我应该以不同方式指定多个排序顺序项吗

解决方法

事实证明,类中有一个比较器覆盖了ORDERBY子句中指定的排序顺序.当使用上面的ORDERBY子句而没有比较器时,我得到了所需的排序.你可以这样做,但我正在杀死额外的代码并选择ORDERBY子句.

比较器路径:

// Sort children
Collections.sort(group.children,CHILD_COMParaTOR);

// Specify sort by location
static final Comparator<Child> CHILD_COMParaTOR = new Comparator<Child>()
{
    @Override
    public int compare (Child child1,Child child2)
    {
        return child1.location.toLowerCase().compareto(child2.location.toLowerCase());
    }
};

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...