如何在onItemClick处理程序中获取项ID

dev*_*oid 5 android onclick simpleadapter onclicklistener

我有两列的类别表category_idname.我创建了一个名为的数据助手类CategoryDataHelper.我有一个名为getCategoryCursor()该助手类的方法,它从类别表中获取id和名称并返回游标.使用该光标,我已经习惯SimpleCursorAdapter显示类别列表.它工作正常.

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  
            }
        });
    }    
}
Run Code Online (Sandbox Code Playgroud)

现在我想实现一个OnItemClickListener并使用category_id所选类别发送一个Intent .如何在onItemClick()方法中获取id ?

Mat*_*lis 17

您可能应该从适配器获取光标.这样,如果您的光标被替换,您仍然仍然获得有效的光标.

Cursor cursor = ((SimpleCursorAdapter) adapterView).getCursor();
cursor.moveToPosition(position);
long categoryId = cursor.getLong(cursor.getColumnIndex(CategoryDataHelper.ID));
Run Code Online (Sandbox Code Playgroud)

或使用"category_id"或任何列的名称代替CategoryDataHelper.ID.

  • `adapterView`通常不是适配器.它是一个使用适配器的视图,因此具有方法`getAdapter()`.因此,在您的示例中,您应该调用`adapterView.getAdapter()`. (9认同)