在ListAdapter上显示之前格式化数据

时间:2011-07-23 09:49:21

标签: java android sqlite

我有一个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);

3 个答案:

答案 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);