基本的に、このチュートリアルに従って、Alphabet-Indexedセクションヘッダーを使用してリストビューを作成しました。私は同じものを日付でソートして作成しようとしています。
これは、データベースの私の日付列に供給される方法です。
String currentDateTime = DateFormat.getDateTimeInstance().format(new Date());
誰かが日付で並べ替えるポインタやスニペットを手伝ってくれませんか?
基本的に、このチュートリアルに従って、Alphabet-Indexedセクションヘッダーを使用してリストビューを作成しました。私は同じものを日付でソートして作成しようとしています。
これは、データベースの私の日付列に供給される方法です。
String currentDateTime = DateFormat.getDateTimeInstance().format(new Date());
誰かが日付で並べ替えるポインタやスニペットを手伝ってくれませんか?
私が知っている唯一の方法は、を使用することjava.util.Date
です。それが表す時間とエポックの間の差に対応する長い値のラッパーにすぎませんJan 1, 1970 00:00:00 GMT
。そのため、(文字列の代わりに) DB long に格納し、テーブルをクエリするときに、結果を「日付」(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() ));