我基本上按照本教程制作了一个带有字母索引部分标题的列表视图。我正在尝试制作相同的内容,并按日期排序。
这就是我在数据库中的日期列的输入方式。
String currentDateTime = DateFormat.getDateTimeInstance().format(new Date());
有人可以帮我提供按日期排序的指针或片段吗?
我基本上按照本教程制作了一个带有字母索引部分标题的列表视图。我正在尝试制作相同的内容,并按日期排序。
这就是我在数据库中的日期列的输入方式。
String currentDateTime = DateFormat.getDateTimeInstance().format(new Date());
有人可以帮我提供按日期排序的指针或片段吗?
我知道的唯一方法是使用java.util.Date
. 它几乎只不过是一个长值的包装器,对应于它所代表的时间和纪元之间的差异Jan 1, 1970 00:00:00 GMT
。因此,您可以将 long 存储在 DB 中(而不是字符串),然后在查询表时按“日期”(long)对结果进行排序,从这些值中构造日期。这一切都是因为 sqlite 不支持日期格式。
像这样的东西:
Cursor c = db.rawQuery("select * from table sort by table_column_date");
for(c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {
Date date = new Date(c.getLong("table_column_date"));
}
一个简单的方法是使用adapter-kit库
首先,实现一个 DateSectionizer。它从您的模型中加载日期时间戳并将其“四舍五入”到这一天的开始,因此同一天的时间戳将具有相同的格式化日期字符串。
public class DateSectionizer implements Sectionizer<Cursor>
{
private static final SimpleDateFormat YMD_FORMAT = new SimpleDateFormat("yyyy-MMMMM-dd");
private static long beginning_of_day(long timestamp)
{
Calendar c = Calendar.getInstance();
c.setTimeInMillis( timestamp );
c.set( Calendar.HOUR_OF_DAY, 0 );
c.set( Calendar.MINUTE, 0 );
c.set( Calendar.SECOND, 0 );
c.set(Calendar.MILLISECOND,0 );
return c.getTimeInMillis();
}
@Override
public String getSectionTitleForItem( Cursor cursor )
{
return YMD_FORMAT.format(new Date(beginning_of_day(cursor.getLong( 2 ));
}
}
其次,将 SimpleSectionAdapter 包裹在现有的 CursorAdapter 周围:
Context c = getApplicationContext();
YourCursorAdapter yca = new YourCursorAdaper(c , your_cursor, true);
your_list_view.setAdapter( new SimpleSectionAdapter<Cursor>(c,yca, R.layout.header_layout, R.id.date , new DateSectionizer() ));