Get selected item from ListView bound with SimpleCursorAdapter

前端 未结 2 717
隐瞒了意图╮
隐瞒了意图╮ 2020-12-02 08:38

I\'m brand new to Android development... coming from iPhone and .Net background. I\'ve seen very similar questions to this one, but none of them dealt with the SimpleCursorA

相关标签:
2条回答
  • 2020-12-02 09:12

    So a couple of points: after you fetch the cursor, you want to call startManagingCursor. This ties the cursor's lifecycle with Activity's lifecycle (so when the Activity gets destroyed the cursor gets closed/cleaned up).

    startManagingCursor(c);
    ListAdapter adapter = new SimpleCursorAdapter(
            this, 
            android.R.layout.simple_list_item_1,  
            c,        
            new String[] {"name"},   
            new int[] {android.R.id.text1}); 
    setListAdapter(adapter);
    

    Also, the database isn't closed, the Cursor typically keeps a live connection to the DB (so the ListView can scroll and do things of that nature that may require future access to the Cursor's contents.

    To your core question, the easiest way to do it in onListItemClick is this:

    Cursor c = ((SimpleCursorAdapter)l.getAdapter()).getCursor();
    c.moveToPosition(position);
    

    You can then use the c.getLong(0) to get the id (assuming you fetched the id column as the first column which is generally the case). However, note that the id is passed in as part of the signature (see the last argument in public void onListItemClick(ListView l, View v, int position, long id)) so you really don't need to fetch it again (but you certainly can if you want to burn the cycles). For accessing other columns you can do the same thing, just change the column index.

    Hope that helps.

    0 讨论(0)
  • 2020-12-02 09:31

    Another way:

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    
            @Override
            public void onItemClick(AdapterView<?> parent, View arg1, int position, long arg3) {
    
                Cursor cursor = (Cursor) parent.getAdapter().getItem(position);
                //TODO
                }
    });
    
    0 讨论(0)
提交回复
热议问题