This is my ListActivity:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.my_list);
mDbHelper = new MyDbAdapter(this);
mDbHelper.open();
fillData();
registerForContextMenu(getListView());
}
private void fillData() {
// Get all of the rows from the database and create the item list
Cursor c =开发者_StackOverflow中文版 mDbHelper.fetchAllTransactions();
startManagingCursor(c);
// Create an array to specify the fields we want to display in the list
String[] from = new String[]{MyDbAdapter.KEY_DATE, MyDbAdapter.KEY_NAME};
// and an array of the fields we want to bind those fields to
int[] to = new int[]{R.id.row_date, R.id.row_name};
// Now create a simple cursor adapter and set it to display
setListAdapter(new SimpleCursorAdapter(this, R.layout.my_list_row, c, from, to));
}
and this is my row layout:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TextView android:id="@+id/row_date" android:layout_width="wrap_content" android:layout_height="fill_parent" />
<TextView android:id="@+id/row_name" android:layout_width="wrap_content" android:layout_height="fill_parent" />
</LinearLayout>
The date is actually stored as an int in the SQLLite database, and thus it displays as an integer.
Does anyone know a way to create a date from the int so it doesn't display as 1216544611
(or whatever) but as "12/11/2009 11:32"
?
I suspect that you will need to write your own CursorAdapter
that formats the int into a date string. The trick is to implement bindView()
to format the list item before it is displayed:
private final class MyCursorAdapter extends CursorAdapter {
MyCursorAdapter(Context context, Cursor c) {
super(context, c);
}
@Override public void bindView(View view, Context context, Cursor cursor) {
// Format the date string
TextView dateView = (TextView) view.findViewById(R.id.row_date);
long millis = cursor.getLong(cursor.getColumnIndex(MyDbAdapter.KEY_DATE));
dateView.setText(DateFormat.getDateInstance().format(new Date(milis)));
// Do the rest of your view formatting
...
}
@Override View public newView(Context context, Cursor cursor, ViewGroup parent) {
View view = getLayoutInflater().inflate(R.layout.my_list_row, null);
bindView(view, context, cursor);
return view;
}
}
and connect it to your Activity
in onCreate()
:
setListAdapter(new MyCursorAdapter(this, c));
For people like me who wonder what is under getLayoutInflater()
which is not implemented or inheritied by CursorAdapter, try this :
(LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE );
精彩评论