来自数据库的Android SimpleCursorAdapter ID

时间:2012-05-30 11:13:38

标签: android database sqlite simplecursoradapter

我正在开发的应用程序中遇到一些问题。 因此,我的所有表都有主键的_id字段,我使用SimpleCursorAdapter将它们绑定到ListViews和Spinners。 我想知道的是如何使ListView或Spinner选中的项具有与相应行相同的ID?

奇怪的是,这适用于ContextMenu,我直接使用NotePad示例:

AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
info.id

此ID字段 IS 与表格上的RowID相同,我可以删除项目,但是当我尝试这样的事情时:

getListView().setOnItemClickListener(new OnItemClickListener() {

        public void onItemClick(AdapterView<?> adapter, View view,
                int position, long arg) {
            Intent i = new Intent(getApplicationContext(),
                    FuelingList.class);
            long id = view.getId();

ID字段是随机的橡皮。 所以我的问题是,在第一个代码位中,Id是 AdapterContextMenuInfo 获取的内容以及如何在代码的其他部分中检索它?

3 个答案:

答案 0 :(得分:3)

由于您知道自己使用的是SimpleCursorAdapter,因此在onItemClick方法中,您可以致电

public void onItemClick(AdapterView<?> adapter, View view, int position, long arg) {
   String value = ((SimpleCursorAdapter) adapter.getAdapter()).getCursor().getString(COLUMN_INDEX);
}

要从当前选择的游标行中获取的列中的COLUMN_INDEX

或者,拨打

adapter.getAdapter().getItem(position)

然后将其转换为Cursor,也可以。

注意1:AdapterView实际上是您的ListView

注意2:由于您使用SimpleCursorAdapter,然后适配器上的getItem(position)会返回位于您指定行的Cursor

注意3:当您拥有Cursor时,您可以通过提供列索引(基于0)或使用cursor.getString(cursor.getColumnIndex("COLUMN_NAME"))

来获取数据

注4:根据Barak的评论,arg参数是使用CursorAdapter时来自_ID字段的值,如果您需要知道的是行_ID,那么只需使用arg值。

答案 1 :(得分:3)

由于您使用的是SimpleCursorAdapter,onItemClick会将数据库行ID传递给您。

        public void onItemClick(AdapterView<?> adapter, View view, int position, long arg)  

long arg部分实际上是数据库中的行ID。

所以你的代码应该是:

getListView().setOnItemClickListener(new OnItemClickListener() { 
     public void onItemClick(AdapterView<?> adapter, View view, 
            int position, long arg) { 
        Intent i = new Intent(getApplicationContext(), 
                FuelingList.class); 
        long id = arg; 

答案 2 :(得分:0)

您可以将行的ID存储在一个arraylist中,并从arraylist的相应位置获取该行的id。这对我有用..

protected void onListItemClick(ListView l, View v, int position, long id) {
    // TODO Auto-generated method stub
    super.onListItemClick(l, v, position, id);

    Intent intent=new Intent(this , Details.class);
    Bundle extras = new Bundle();
    extras.putLong("ID", IDList.get(position));
    intent.putExtras(extras);
    startActivityForResult(intent, SHOW_DETAILS);

}

你可以使用listview.setonitenclicklistener ...希望它有所帮助