I am storing information on the phone’s contacts using a sqlite database.
The fields I am storing are: _id, contact_id, body where _id is the row’s id, contact_id is the phone contact’s id and body is just a simple text which is the actual information I am storing.
I’m using a SimpleCursorAdapter to map the data to the view, like so:
Cursor cursor = database.fetchInformation(); // fetch info from DB
String[] from = new String[] { CONTACT_ID, BODY };
int[] to = new int[] { R.id.contact, R.id.body };
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.row, cursor, from, to);
getListView().setAdapter(adapter);
What I would actually want is to get the contact name that is associated with this CONTACT_ID, and have that be shown in the view.
I can’t seem to find a simple solution. I’ve tried implementing my own SimpleCursorAdapter and rewriting setViewText(TextView, String) but it didn’t work. Also, it just seems overly complicated for such a simple task.
Any help? Thanks.
You really have two options here:
1) You could create a MatrixCursor that contains all the information you wish to bind to your ListView. While its not very difficult to do this, its probably not the most efficient use of memory because you would need to get the name of every contact in your cursor.
2) You could subclass from CursorAdapter. Its pretty simple to implement the appropriate newView and bindView methods. Inside of bindView you would simply query the phone’s contact content provider to get the name of the contact currently being bound.