Les données de modification SimpleCursorAdapter
-
23-10-2019 - |
Question
Je travaille sur une application TV Guide qui utilise une ListActivity
montrant les émissions de télévision pour un canal / un jour à la fois. J'utilise un RelativeLayout
pour les articles de ListView
et je veux le ListView
à ressembler à quelque chose comme ceci:
07:00 The Breakfast Show
Latest news and topical reports
08:00 Tom and Jerry
More cat and mouse capers
Je reçois les données pour les éléments de ListView
en utilisant le code suivant:
Cursor cursor = db.rawQuery(SELECT blah,blah,blah);
String[] columnNames = new String[]{"start_time","title", "subtitle"};
int[] resIds = new int[]{R.id.start_time_short, R.id.title, R.id.subtitle};
adapter = new SimpleCursorAdapter(this, R.layout.guide_list_item, cursor, columnNames, resIds);
Mon problème est que le champ start_time
est un datetime
avec le format suivant:
2011-01-23 07:00:00
ce que je reçois est la suivante:
2011-01-23 07:00:00 The Breakfast Show
Latest news and topical reports
2011-01-23 08:00:00 Tom and Jerry
More cat and mouse capers
Ce que je voudrais faire est le format ci-dessus en utilisant SimpleDateFormat
("HH:mm"
) donc je ne reçois que la partie hour:minute
du champ start_time
.
Je l'ai trouvé l'interface SimpleCursor.ViewBinder
qui donne à penser qu'il peut être ce que je veux, mais je ne peux pas comprendre comment l'utiliser. Si je ne me trompe pas à propos ViewBinder
, je vous en serais reconnaissant quelques conseils à l'exemple de code sur la façon de l'utiliser. Sinon, comment puis-je obtenir d'autre changer le champ start_time
pour montrer simplement le format HH:mm
?
La solution
Vous pouvez faire quelque chose comme ceci:
adapter.setViewBinder(new SimpleCursorAdapter.ViewBinder() {
@Override
public boolean setViewValue(View view, Cursor cursor, int column) {
if( column == 0 ){ // let's suppose that the column 0 is the date
TextView tv = (TextView) view;
String dateStr = cursor.getString(cursor.getColumnIndex("name_of_the_date_column"));
// here you use SimpleDateFormat to bla blah blah
tv.setText(theFormatedDate);
return true;
}
return false;
}
});