我在我的应用中使用SQLite。我有一个listView,其中填充了数据库中的值。
当我点击列表视图中的某个项目时,我会转到另一个页面,我希望(有意图)从ID DATABASE传输ID。问题是我只是从listView的位置传输ID,这是错误的。例如,假设我有:
ID名称 1大卫 2约瑟夫
我的listView将显示两个名称。但如果我删除大卫,我点击约瑟夫时得到的ID是1而不是2。那就是问题!
所以:我想从我的数据库中检索ID,而不是在点击某个项目时从我的listView中检索
这是我帮手中的方法:UPDATED!
public Cursor getAllCours()
{
String Query = ("select ID as _id, nom from " + TABLE_COURS);
Open();
Cursor cursor = db.rawQuery(Query, null);
return cursor;
}
以及我如何在我的活动中显示它:
Cursor cursor = dbhelper.getAllCours();
String[] from = { "nom" }; int[] to = { android.R.id.text1 };
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1, cursor, from, to, 0);
lv.setAdapter(adapter);
最后,我的listviewClickListener:
lv.setOnItemClickListener(new AdapterView.OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
//I THINK THE ERROR IS HERE !
long itemid= lv.getItemIdAtPosition(i);
int id= (int)itemid;
String a =lv.getItemAtPosition(i).toString();
Intent b = new Intent(AffichageCours.this,AffichageNotes.class);
Bundle args = new Bundle();
args.putString("nom_cours",a);
args.putInt("id",id);
b.putExtras(args);
startActivity(b);
}
});
}
我的TABLE_COURS列:
private static final String TABLE_COURS = "cours";
private static final String COLONNE_IDCOURS = "ID";
private static final String COLONNE_COURS = "nom";
private static final String CREATE_COURS ="CREATE TABLE cours " +
"("+COLONNE_IDCOURS+" INTEGER PRIMARY KEY AUTOINCREMENT , "
+COLONNE_COURS+" TEXT NOT NULL)";
我如何删除我的上下文菜单:
@Override
public boolean onContextItemSelected(MenuItem item) {
AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
switch(item.getItemId())
{
case R.id.supprimer:
dbhelper.deleteCours(lv.getItemAtPosition(info.position).toString());
adapter.remove(adapter.getItem(info.position)); //the error is here..
adapter.notifyDataSetChanged();
return true;
谢谢你们!
答案 0 :(得分:0)
我认为问题在于你要求ListView中行的Id而不是该行所持有的实际数据。在onItemClick
方法中更改此内容:
long itemid= lv.getItemIdAtPosition(i);
为此:
String courId = adapter.getItem(i);
此处的关键是尝试从ArrayAdapter
直接从ListView
获取数据。
答案 1 :(得分:0)
您应该使用Java对象,这样对您来说很容易。
支持您在dataBase中存储了联系人(包含字段:名称,移动和地址)。所以为此创建一个POJO:
class Contacts{
private String name;
private String mobile;
private String address;
//write getters and setters
}
然后,无论何时访问数据库,都要获取要显示并存储在ArrayList<Contacts> mContactList;
然后在ListView的适配器中传递此列表以在listView中显示数据。
CustomAdapter adapter = new CustomAdapter(context, layoutResource, mContactList);
然后,您可以根据位置单击特定列表项来检索对象;
lv.setOnItemClickListener(new AdapterView.OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Contacts contact = mContactList.get(i);
// now you can do whatever you want;
}
});
答案 2 :(得分:0)
由于您没有使用自定义适配器,为什么不在onItemClickListener中尝试这个
String idThatYouWant = listeCours.get(i).getId();