Android Listview onListItemClick获取Sqlite Id

时间:2013-10-08 06:02:48

标签: android sqlite android-listview

我只是在sqlite表中显示一个列表。我没有使用任何BDHelper类。只有这段代码才能获得id。

enter image description here
当我点击第一个项目时,它显示0表示表格中的ID为1.下面是我的代码。

SQLiteDatabase myDB;
        try {
            myDB = openOrCreateDatabase(DB_NAME,
                    SQLiteDatabase.CREATE_IF_NECESSARY, null);          
            myDB.execSQL("create table if not exists " + COUNTRY_TABLE
            + "(country_id INTEGER PRIMARY KEY,"
            + "country_title text," 
            + "country_status int(11));");          

             /*myDB.execSQL("insert into " + COUNTRY_TABLE +" values "+
             "(null,'India',1)," +
             "(null,'China',1)," +
             "(null,'Australia',1)," +
             "(null,'Japan',1)," +
             "(null,'Germany',1)");*/


            Cursor c = myDB.rawQuery("select country_id,country_title from "
                    + COUNTRY_TABLE + " where country_status=1", null);
            if (c != null) {
                if (c.moveToFirst()) {
                    do {
                        int id = c.getInt(c.getColumnIndex("country_id"));
                        String name = c.getString(c.getColumnIndex("country_title"));                       
                        clist.add(id + ") " + name);
                    } while (c.moveToNext());
                    //int itemcount = clist.size();
                    //Toast.makeText(MainActivity.this, itemcount, Toast.LENGTH_LONG).show();
                    setListAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, clist));
                }
            }

        } catch (SQLiteException se) {
            Toast.makeText(MainActivity.this, se.getMessage().toString(),Toast.LENGTH_LONG).show();
        }

protected void onListItemClick(ListView l, View v, int position, long id) {
        // TODO Auto-generated method stub
        super.onListItemClick(l, v, position, id);
        Toast.makeText(MainActivity.this,String.valueOf(id),Toast.LENGTH_LONG).show();
    }

请建议我该怎么做以获取id fron表而不是位置。

7 个答案:

答案 0 :(得分:1)

尝试以下代码:

将您的id和名称数据放在clist ArrayList中,首先生成getter,setter方法,在myou获取该数据时在该方法中设置您的id和名称,每次在ArrayList中添加该数据然后如下所示使用它。

protected void onListItemClick(ListView l, View v, int position, long id) {
        // TODO Auto-generated method stub
        super.onListItemClick(l, v, position, id);
        Toast.makeText(MainActivity.this,clist.get(position).getId(),Toast.LENGTH_LONG).show();
    }

答案 1 :(得分:1)

public List<Emp> AllRecords() 
{
    List<Emp> dataset = new ArrayList<Emp>();
    Cursor cursor = database.query(DatabaseHelper.TABLE_EMPLOYEE,allColumns, null, null,null, null, null);

    cursor.moveToFirst();
    while (!cursor.isAfterLast()) {
        Emp obj = cursorToContact(cursor);
        dataset.add(obj);
      cursor.moveToNext();
    }
    cursor.close();
    return dataset;
}

private Emp cursorToContact(Cursor cursor) 
{
    Emp obj = new Emp();
    obj.setId(cursor.getInt(0));
    obj.setName(cursor.getString(1));
    obj.setDesig(cursor.getString(2));
    return obj;
}


//--------------
list_data = (ArrayList<Emp>) qh.AllRecords();
CustomListAdapter adapter = new CustomListAdapter(MainActivity.this,list_data);
//---------
int id=list_data.get(arg2); //Type mismatch: cannot convert from Emp to int

Plz告诉我应该写什么来获得国家身份。

答案 2 :(得分:1)

看到没有被接受的答案...... 我这样做了,似乎有效。

我正在使用ListView Activity,SQLiteDatabase和ArrayAdapter

在我的onListItemClick方法中,我实例化一个新对象,使其等于我的适配器中当前位置的任何项目。 任务task = adapter.getItem(arg3);

在我的任务类中,我有一个类型为long的私有变量id,以及该变量的setter和getter。

因此,我可以这样做: long taskId = task.getId();

使用Toast检查此结果产生了SQLite生成的id而不是ListView中的位置,这就是我需要的。

希望这可以帮助别人!

答案 3 :(得分:0)

((TextView)v).getText();通过使用这个我们将得到视图的文本,然后我们可以再次查询到表以获取相应文本的id并烘烤它。

 String country_title=((TextView)v).getText();

 Cursor c = myDB.rawQuery("select country_id from "+ COUNTRY_TABLE + " where  country_title='"+country_title+"'", null);
  Toast.makeText(MainActivity.this,c.getString(c.getColumnIndexorThrow("country_title")),Toast.LENGTH_LONG).show();

答案 4 :(得分:0)

你可以在列表项目上设置id,然后在onItemClick上调用getTag()。

答案 5 :(得分:0)

这不可能按照我想要的方式,但以其他方式获得解决方案。在游标循环中,将数据添加到列表中,取另一个ArrayList并仅向其添加id。

clist1.add(id);

现在,在onListItemClick上,您可以获取项目的位置。因此,使用此位置并从其他ArrayList clist1获取id

int country_id=clist1[position];

希望这有帮助。

答案 6 :(得分:0)

我迟了几年,但它可能对其他人有帮助:基本上设置标记,无论你在哪里设置各个视图。

display

然后你可以通过调用getTag()来访问它:

window.onload