0

我正在尝试为密码管理器创建一个列表视图,该列表视图将使用数据库中的项目填充列表视图,当有人单击它时,它将返回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();
          }

}
4

3 回答 3

0

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

于 2013-10-30T15:59:00.393 回答
0

如果您正在从 a 读取数据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 parent, View view, int position, long id)

如果使用 a CursorAdapter,则最后一个参数 ,id_id数据库中的列。

于 2013-10-30T16:05:22.187 回答
0

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

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

CursorLoaders 的另一个:链接

于 2014-02-13T17:24:54.033 回答