我正在开发一个会议应用程序,我们希望会话首先按时间分组,然后按房间位置分组。我已经成功地在我的ExpandableListActivity中按一个或另一个排序,但是对主要和次要排序都没有成功。
设置
查询
Cursor cursor = context.getContentResolver()
.query(uri,
ScheduleData.PROJECTION,
null,
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的限制吗?我应该以不同方式指定多个排序顺序项吗?
答案 0 :(得分:1)
事实证明,类中有一个比较器覆盖了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());
}
};
答案 1 :(得分:0)
只需将数据放入'ArrayAdapter',按照您想要的方式对其进行排序,然后将适配器设置回活动列表。
答案 2 :(得分:0)
这不是一个真正的答案,但我还不能写评论。 SORT_ORDER字符串应该是正确的。 但是您可以尝试使用shell并直接执行sql lite查询,以便缩小问题范围。
adb shell
现在导航到您应用的目录;例如:
cd /data/data/com.myapp/databases)
键入以下命令启动SQLLite命令行工具:
sqlite3&lt;文件名&gt;
如果您不知道数据库文件的名称,只需输入“ls”即可查看此目录中的所有文件。
SELECT * FROM timeslots,locations ORDER BY timeslots.timestart,locations.name;