【发布时间】:2017-09-12 20:59:12
【问题描述】:
我在我的应用程序中使用 SQLite。我有一个 listView,其中填充了数据库中的值。
当我从列表视图中单击一个项目时,我会转到另一个页面,并且我想(有意)从数据库中传输 ID。问题是我只是从我的listView的位置转移ID,这是错误的。例如,假设我有:
ID 名称 1 大卫 2约瑟夫
我的 listView 将显示两个名称。但是,如果我删除 David,我在 Joseph 中单击时得到的 ID 是 1 而不是 2 。这就是问题所在!
所以:当我点击一个项目时,我想从我的数据库中而不是从我的 listView 中检索 ID
这是我在助手中的方法:已更新!
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;
谢谢你们!
【问题讨论】:
-
你不需要
getItemIdAtPosition:查看传递给onItemClick方法的最后一个参数,当然你需要使用支持你的数据库ID的正确适配器,比如SimpleCursorAdapter,而不是ArrayAdapter -
好的,但是我该如何使用 SimpleCursorAdapter 呢?
-
就这么简单:thinkandroid.wordpress.com/2010/01/09/…,它使用
this.setListAdapter(mAdapter);,你可以直接调用lv.setAdapter(...); -
你没有我的问题的例子吗?喜欢代码?你发给我的链接有点复杂..
-
你有 6 行代码,其中有什么不清楚的地方? TABLE_COURS 中有哪些列?
标签: android sqlite listview android-studio android-database