我有一个ListAdapter,它从我的SQLite数据库中获取日期并在列表中显示所有日期。问题是,日期不是人类可读的格式,我有一个辅助方法来执行转换,但我如何在我的代码上实现它?
这就是我的代码的样子:
// Get all of the notes from the database and create the item list
Cursor c = mDbHelper.fetchAllItems();
startManagingCursor(c);
String[] from = new String[] { TrackerDbAdapter.KEY_DATE };
int[] to = new int[] { R.id.row_date };
// Now create an array adapter and set it to display using our row
SimpleCursorAdapter history =
new SimpleCursorAdapter(this, R.layout.history_row, c, from, to);
setListAdapter(history);
答案 0 :(得分:0)
我会尝试创建自定义ListAdapter或自定义SimpleCursorAdapter
如果您不需要使用光标,请查看此链接。 http://www.softwarepassion.com/android-series-custom-listview-items-and-adapters/它解释了如何使用arraylist和自定义listAdpater。
您也可以使用SimpleCursorAdapter执行相同的操作。我此时无法找到一个好的教程。我做的时候会加上这个
答案 1 :(得分:0)
使用SimpleCursorAdapter.ViewBinder
将格式化数据附加到Views。
SimpleCursorAdapter.ViewBinder dataBinder = new SimpleCursorAdapter.ViewBinder() {
@Override
public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
((TextView)view).setText(cursor.getString(columnIndex));
return true;
}
};
simpleCursorAdapter.setViewBinder(dataBinder)
答案 2 :(得分:0)
选项1:与@nguyendat一样,为了提高性能,您可以将格式化的日期存储在数据库中,以及未格式化的版本,以便为您提供最大的灵活性。但是,如果在同一个表中,由于冗余,这将违反第二范式,并且您必须小心在代码中更新行中的所有数据。 要实现此目的,请将您的转换代码放在DBAdapter的insert命令中。
选项2:为您的日期创建一个班级
public class FormattedDate {
private int oneDate;
public Punch (int unformattedDate) {
oneDate = unformattedDate;
} // ends constructor
@Override
public String toString() {
//put your conversion code here
return myFormattedDate;
}}
这有一个额外的好处,可以放置任何其他代码进行比较或转换。
在您的DBAdapter中,将您的查询更改为此
public ArrayList<FormattedDate> fetchAllItems() {
ArrayList<FormattedDate> results = new ArrayList<FormattedDate>();
Cursor c = db.rawQuery("SELECT MY_UNFORMATTED_DATE FROM yourTable", null);
if (c.getCount() > 0) {
c.moveToFirst();
do {
results.add( new FormattedDate(c.getInt(c.getColumnIndex(MY_UNFORMATTED_DATE))));
} while (c.moveToNext());
}
c.close();
return results;
}
这将返回FormattedDate对象的ArrayList
最后,这将填充listview
setContentView(R.layout.my_list_view);
ArrayList<FormattedDate> dateArray = mDBHelper.fetchAllItens();
ArrayAdapter<FormattedDate> dateAdapter = new ArrayAdapter<FormattedDate> (getApplicationContext(), R.layout.list_item, dateArray);
setListAdapter(dateAdapter);