I have a category table with two columns category_id and name. I have created a data helper class named CategoryDataHelper. I have a method named getCategoryCursor() of that helper class which fetches the id and the name from the category table and returns the cursor. Using that cursor, I have used SimpleCursorAdapter to display the list of categories. It is working fine.
public class Categories extends ListActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
categoryDataHelper = new CategoryDataHelper(getApplicationContext());
Cursor categoryCursor = categoryDataHelper.getCategoryCursor();
ListAdapter adapter = new SimpleCursorAdapter (
this,
android.R.layout.simple_list_item_1,
categoryCursor,
new String[] { CategoryDataHelper.NAME },
new int[] {android.R.id.text1});
// Bind to our new adapter.
setListAdapter(adapter);
list = getListView();
list.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// Here I want the category_id
}
});
}
}
Now I want to implement an OnItemClickListener and send an Intent with the category_id of the selected category. How can I get the id in the onItemClick() method?
You probably should get the cursor from the adapter. This way if your cursor gets replaced you are still are still getting a valid cursor.
Cursor cursor = ((SimpleCursorAdapter) adapterView).getCursor();
cursor.moveToPosition(position);
long categoryId = cursor.getLong(cursor.getColumnIndex(CategoryDataHelper.ID));
or use "category_id" or whatever the name of your column is in place of CategoryDataHelper.ID.
Thanks Zack, I could solve with your post...Excelent!!! ... I send a parameter from an activity to another so:
Intent myIntent = new Intent(Clientes.this, Edc.class);
Cursor cursor = (Cursor) adapter.getItem(position);
myIntent.putExtra("CLIENTE_ID", cursor.getInt(cursor.getColumnIndex("_id")));
startActivity(myIntent);
In the other activity (EDC)....i get the parameter so:
int _clienteId = getIntent().getIntExtra("CLIENTE_ID", 0);
How about in onItemclick:
categoryCursor.moveToPosition(position);
and then from the returned cursor get the ID from your helper?
With the SimpleCursorAdapter, the onItemClick function passes in the databases id for the selected item. So, the solution is simply
long category_id = id
来源:https://stackoverflow.com/questions/5553176/how-to-get-the-item-id-in-an-onitemclick-handler