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

时间:2011-04-05 14:06:15

标签: android onclick onclicklistener simpleadapter

我有一个包含两列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  
            }
        });
    }    
}

现在我要实现一个OnItemClickListener并向所选类别的category_id发送一个Intent。如何在onItemClick()方法中获取ID?

4 个答案:

答案 0 :(得分:17)

您可能应该从适配器获取光标。这样,如果你的光标被替换,你仍然会得到一个有效的光标。

Cursor cursor = ((SimpleCursorAdapter) adapterView).getCursor();
cursor.moveToPosition(position);
long categoryId = cursor.getLong(cursor.getColumnIndex(CategoryDataHelper.ID));

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

答案 1 :(得分:3)

谢谢扎克,我可以用你的帖子来解决......非常好! ... 我将参数从活动发送到另一个参数:

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);

在其他活动(EDC)....我得到参数:

int _clienteId = getIntent().getIntExtra("CLIENTE_ID", 0);

答案 2 :(得分:1)

在onItemclick上怎么样:

categoryCursor.moveToPosition(position);

然后从返回的游标中获取助手的ID?

答案 3 :(得分:1)

使用SimpleCursorAdapteronItemClick函数会传入所选项目的数据库ID。所以,解决方案很简单

long category_id = id