带有日期排序部分标题的游标适配器

时间:2012-06-21 06:06:58

标签: android android-listview android-cursor

我基本上通过this教程制作了带有Alphabet-Indexed节标题的列表视图。我正在努力做同样的事情,按日期排序。

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

有人可以按日期排序指针或片段来帮助我。

2 个答案:

答案 0 :(得分:0)

我知道的唯一方法是使用java.util.Date。它几乎不过是一个长值的包装器,它对应于它所代表的时间与时期Jan 1, 1970 00:00:00 GMT之间的差异。因此,您可以存储在DB long(而不是字符串)中,然后在查询表时按“date”(longs)对结果进行排序,从这些值中构造日期。这一切都是因为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"));
}

答案 1 :(得分:0)

一种简单的方法是使用adapter-ki t库

首先,实现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 ));
   }
}

其次,在现有的CursorAdapter周围包装一个SimpleSectionAdapter:

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