2013-10-30 41 views
0

我试图创建一个密码管理器的列表视图,将填充与数据库中的项目,当有人点击它会返回primaryid ....我看到一个列表视图列表项其他的例子,但不能把它做corectly ....这是我迄今所做的....我能够填充列表查看,但无法处理的点击事件:(获取主ID上点击Android的

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

} 

回答

0

;使用保存ID(getColumnIndex(“_ ID”))的自定义列表适配器。,你应该用一个CursorAdapter或其subclassses如代替ArrayAdapterSimpleCursorAdapter之一:

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(适配器视图父,观景,INT位置,长ID)

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

+0

感谢很多人....我欠你的:) 完成了一半的方式...我能在我的SQLite数据库中获取位置:) Quick QUestion ...因为我的_id是一个自动增量,它会返回相同的_id,例如: 例如,如果有三个项目,并且我从数据库中删除第二行...则我选择行中的最后一个元素....我会将ID作为3或2 – Prasun

+0

自动增量列不会重复删除_ids,所以你将继续得到3的C(如果你插入D,它会得到_id 4等)。 – ianhanniballake

+0

感谢...你使我不再怀疑:) – Prasun

0

如果你是从01读取数据在您的自定义对象而不是Android的为您创建简单视图的

0

它不使用ArrayAdapter从数据库加载一个好主意。您应该使用CursorAdapter和CursorLoader来管理数据库。 SimpleCursorAdapter已弃用。

这里的自定义CursorAdapter的一个很好的教程:link

另一个用于CursorLoaders:link