微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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());
    }
};

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐