1

我基本上按照本教程制作了一个带有字母索引部分标题的列表视图。我正在尝试制作相同的内容,并按日期排序。

这就是我在数据库中的日期列的输入方式。 String currentDateTime = DateFormat.getDateTimeInstance().format(new Date());

有人可以帮我提供按日期排序的指针或片段吗?

4

2 回答 2

0

我知道的唯一方法是使用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"));
}
于 2012-06-21T06:18:06.797 回答
0

一个简单的方法是使用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() ));
于 2014-02-02T13:06:07.247 回答