我设计了一个自定义ListView
,它有更多子视图
我有关于以“Asc”或“Desc”顺序对ListView
数据进行排序的想法,它直接从数据库中检索数据,但在我的情况下,我使用了CustomSimpleCursorAdapter,我需要对{{1}中的数据进行排序取决于以下值:
TextView
答案 0 :(得分:0)
如果获取数据库中的数据,可以使用ASC或DESC并放入ArrayList 另一种方法是你可以使用Collections.sort()。但是你必须在数据类中实现可比较和重写的比较方法。
答案 1 :(得分:0)
查询数据库时,应使用“order by”子句。例如,this method将order by子句作为最后一个参数。我不知道你如何在数据库中存储你的日期和时间,但如果它是SQLite可以识别并提供排序的东西,那么它应该工作。以下将查询名为“table”的表上的所有列,其中没有where子句,没有“group by”子句,没有“having”子句,并且按时间列降序排序(如果您想要,则使用ASC升序) :
database.query("table", null, null, null, null, null, "time DESC");
修改强>
如果您无法存储所需的确切数据(在这种情况下,直到事件发生的几天),我只能看到两个选项:
1)。获取光标后,迭代结果并撰写新的排序列表。您可以在java中创建某种模型对象,从游标中读取值,并使用比较器函数对它们进行排序。那时你可能不会再使用CursorAdapter
了。建立自己的ListAdapter
非常容易 - 我建议您观看The World of Listview
2)。由于查询方法采用字符串,您实际上可以编写更复杂的查询,以便SQLite为您提供您想要的数据(并且仍然为您排序)。如果您的时间存储为长时间,您可以执行以下操作:
long currentTime = System.currentTimeMillis();
String timeAsString = Long.toString(currentTime);
String remainingTimeColumn = "(time_column - " + timeAsString + ") AS remaining_time";
// compose query
String table = "table";
String[] columns = new String[] {"column1", "column2", ..., "columnN", remainingTimeColumn};
String order = "remaining_time ASC";
// query
Cursor cursor = database.query(table, columns, null, null, null, null, order);
// later, get remaining time from cursor row
long remainingTime = cursor.getLong(cursor.getColumnIndex("remaining_time"));
在这种情况下,"time_column"
是存储事件时间的列的名称。这样做是创建一个名为"remaining_time"
的附加列,该列是从一个实际列值计算得出的。然后通过该合成列对结果进行分类。您获得的光标将包含此列和这些值,您只需要具有正确的列名即可访问它们。
由于我不知道您的数据格式的详细信息,我不能说这正是您的查询应该如何看,但这个想法应该是清楚的。你可以从这里找出更精细的细节......