Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Modifying SimpleCursorAdapter's data

I'm working on a TV Guide app which uses a ListActivity showing the TV shows for one channel / one day at a time. I'm using a RelativeLayout for the ListView items and I want the ListView to look something like this:

07:00 The Breakfast Show
      Latest news and topical reports
08:00 Tom and Jerry
      More cat and mouse capers

I get the data for the ListView items using the following code:

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

My problem is that the start_time field is a datetime with the following format:

2011-01-23 07:00:00

so what I get is this:

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

What I'd like to do is format the above using SimpleDateFormat("HH:mm") so I only get the hour:minute part of the start_time field.

I've found the SimpleCursor.ViewBinder interface which suggests it may be what I want but I can't figure out how to use it. If I'm right about ViewBinder, I'd appreciate some pointers to sample code on how to use it. Otherwise, how else can I achieve changing the start_time field to simply show HH:mm format?

like image 368
Squonk Avatar asked Jan 23 '11 22:01

Squonk


People also ask

What is the role of the Simplecursoradapter?

An easy adapter to map columns from a cursor to TextViews or ImageViews defined in an XML file. You can specify which columns you want, which views you want to display the columns, and the XML file that defines the appearance of these views.

How to get data from ListView by Clicking item on ListView?

Try this: my_listview. setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> parent, View view, int position, long id) { } });


1 Answers

You can do something like this:

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;
    }
});
like image 197
Cristian Avatar answered Oct 05 '22 07:10

Cristian