单击Android中的列表项时获取主ID

时间:2013-10-30 15:49:41

标签: java android sqlite listview

我正在尝试为密码管理器创建一个列表视图,该列表视图将使用来自数据库的项目填充列表视图,当有人点击它时将返回primaryid ....我已经看到了其他示例但是无法完成核心工作....这是我到目前为止所做的......我能够填充列表视图但无法处理点击事件:(

    ArrayList<String> listItems=new ArrayList<String>();
    ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_single_choice , listItems);


    SQLiteDatabase DB= null;
     final String TableName = "XIBEAT_PASSWORDS";
     String DBname="Xibeat_Crypto_Knight_Vault";
    try {
        DB = this.openOrCreateDatabase(DBname, MODE_PRIVATE, null);
        DB.execSQL("CREATE TABLE IF NOT EXISTS " + TableName + " ('_id' INTEGER PRIMARY KEY AUTOINCREMENT,HOST TEXT, URL TEXT, PASSWORD TEXT, NOTES TEXT, TAG TEXT, TIME TEXT, DATE TEXT, EXPIRE TEXT, EDITED TEXT, STRENGTH TEXT, REASON TEXT);");


           Cursor c = DB.rawQuery("SELECT * FROM " + TableName , null);

           int host= c.getColumnIndex("HOST");

           String title="";
           c.moveToFirst();
        if(c!=null)
        {
        while (c.moveToNext()){
                    title = c.getString(host);
                    //Toast(title);
                    listItems.add(title);

        }
        }  

        final ListView passList=(ListView)findViewById(R.id.passlist);
        passList.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, listItems));
        //===============ONCLICK LISTENER+=========
        passList.setOnItemClickListener(new OnItemClickListener() 
        {public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) {






        }});            





          } finally {
           if (DB != null)
            DB.close();
          }

}

3 个答案:

答案 0 :(得分:0)

使用自定义列表适配器将Id(getColumnIndex(“_ id”);)保存在自定义对象中,而不是让Android为您创建简单视图。

答案 1 :(得分:0)

如果您正在阅读Cursor中的数据,则应使用CursorAdapter或其中一个子类,例如SimpleCursorAdapter代替ArrayAdapter

Cursor c = DB.rawQuery("SELECT * FROM " + TableName , null);
final ListView passList=(ListView)findViewById(R.id.passlist);
passList.setAdapter(new SimpleCursorAdapter(this, // Context
    android.R.layout.simple_list_item_1, // Layout
    c, // Your Cursor
    new String[] { "HOST" }, // Column(s) you want to display
    new int[] { android.R.id.text1 }),
    0); // Flags, 0 -> don't auto-requery when the data changes

onItemClick的完整签名是:

  

onItemClick(AdapterView父视图,视图视图,int位置,长id)

如果您使用CursorAdapter,则最后一个参数id是数据库中的_id列。

答案 2 :(得分:0)

使用ArrayAdapter从DB加载不是一个好主意。您应该使用CursorAdapter和CursorLoader来管理数据库。不推荐使用SimpleCursorAdapter。

这是关于自定义CursorAdapter的一个很好的教程:link

CursorLoaders的另一个:link