I’m developing an alarm clock app for android and I want to have displayed list of alarms on the main screen. Each row of this ListView is defined in xml file. And I want to have separate TextViews for each day of week. Program will check in sqlite db if for eg. value for monday is = 1 and then change color of this TextView to red. I have written this code, but that doesn’t work. What’s wrong?
private void fillData() {
// Get all of the notes from the database and create the item list
Cursor c = db.fetchAllAlarms();
startManagingCursor(c);
String[] from = new String[] { db.KEY_TIME, db.KEY_NAME };
int[] to = new int[] { R.id.time, R.id.alarmName };
// Now create an array adapter and set it to display using our row
SimpleCursorAdapter alarms =
new SimpleCursorAdapter(this, R.layout.alarm_row, c, from, to);
alarms.setViewBinder(new SimpleCursorAdapter.ViewBinder() {
public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
int dayOfWeekIndex = cursor.getColumnIndex("mon");
if (dayOfWeekIndex == columnIndex) {
int color = cursor.getInt(dayOfWeekIndex);
switch(color) {
case 0: ((TextView) view).setTextColor(Color.RED); break;
case 1: ((TextView) view).setTextColor(Color.GRAY); break;
}
return true;
}
return false;
}
});
From the Android documentation on
SimpleCursorAdapter.ViewBinder:In other words, your implementation of
setViewValueshould not be specific to any oneView, asSimpleCursorAdapterwill make changes to eachView(according to your implementation) when it populates theListView.setViewValueis basically your chance to do whatever you wish with the data in yourCursor, including setting the color of your views. Try something like this,Note that the above code assumes a column named
"day_of_week"which holds anintvalue 0-6 (to specify the specific day of the week).