5

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?

JJD
  • 50,076
  • 60
  • 203
  • 339
dev_android
  • 8,698
  • 22
  • 91
  • 148

4 Answers4

17

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.

Matthew
  • 44,826
  • 10
  • 98
  • 87
  • 9
    `adapterView` is usually not an adapter. It's a view that uses adapter and therefore have method `getAdapter()`. So, in your example you should call `adapterView.getAdapter()` instead. – Dmitry Zaytsev Jan 30 '13 at 15:00
  • Is it applicable with `SimpleAdapter`? – Apurva Feb 08 '15 at 16:52
3

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);
agf
  • 171,228
  • 44
  • 289
  • 238
ag123
  • 31
  • 1
1

With the SimpleCursorAdapter, the onItemClick function passes in the databases id for the selected item. So, the solution is simply

long category_id = id
Jason
  • 413
  • 5
  • 11
1

How about in onItemclick:

categoryCursor.moveToPosition(position);

and then from the returned cursor get the ID from your helper?

Matt M
  • 814
  • 11
  • 23