Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

assigning hidden values to a listview item

I have an activity that extends ListView. I populate my list with the results of a query to the sqlite database. A list element consists of start_time, end_time, client_name and status. These are the 4 bits on info I need to display for each list item.

My question is: Is it possible for me to assign hidden elements to this ListView item?

For example, I want to store the _id field of the database row for that ListView item, so that when I click it I can start a new activity based on data for that database row.

EDIT

The Code I use to fill my list from my Cursor:

String[] columns = new String[] {VisitsAdapter.KEY_CLIENT_FULL_NAME, VisitsAdapter.KEY_STATUS,VisitsAdapter.KEY_CLIENT_START_TIME, VisitsAdapter.KEY_CLIENT_END_TIME};

// the XML defined views which the data will be bound to
int[] to = new int[] { R.id.name_entry,R.id.number_entry,R.id.start_time_display,R.id.end_time_display  };

SimpleCursorAdapter mAdapter = new SimpleCursorAdapter(HomeScreen.this, R.layout.list_element, cur, columns, to);

Where R.layout.list_item is the XML for my list item. I come from a PHP/HTML background so what I would typically do here is have a hidden field to hold my _id value that I could then access once the list item was clicked. can I do something similar in android? can I put a hidden _id field in my xml layout?

like image 252
Kevin Bradshaw Avatar asked Aug 16 '10 11:08

Kevin Bradshaw


2 Answers

You should try to loosen yourself from the web development frame of mind a little bit. There is no need to store such a thing as the id in a hidden field in your view. That would mix your data with your user interface and create a lot of confusion and unnecessary view objects.

If you are using a sqlite database to store your values you should use a CursorAdapter to manager your list items. The CursorAdapter stores the result that you got from the Database and manages how the data is displayed to the user. If you then register an onItemClickListener on your ListView the listener will receive the adapter and the position of the data item whose cell was clicked in the adapter. Now you can use getItem to retrieve a cursor pointing to the database result that was used to create the listitem. Now you can get the id or all other values that are not shown to the user from the database result and attach it to an intent to start the next activity.

like image 156
Janusz Avatar answered Nov 19 '22 18:11

Janusz


You should consider creating a java object which would gather all this information. for instance, you could create a class like "ListItem" and each item would have 5 properties :
start_time
end_time
client_name
status id (and more if you need)

And then, you have 2 options, either you serialize you object to put the whole object in the database, or you keep the structure you already have (I suppose), and each row of your database becomes a ListItem object. Then, when you query your database, you put them all in an ArrayList, and extend ArrayAdapter to make your own adapter. Finally, in the getView method, you call myListItem.getEnd_Time and all the method you need to display your data, and simply don't use the getId, which you can directly use from the adapter when you need the object.

like image 40
Sephy Avatar answered Nov 19 '22 18:11

Sephy