我的代码在这里…………!当从 ListView 中删除了一行时。 ListView 的行的索引已更改,但数据库中的主键 id 未更改。现在,当我单击该项目并将 ListView 的单击项目的位置传递给新 Activity 时。并尝试检索具有该 ID 的记录,它不会返回任何东西或返回不正确的数据。现在我的问题是如何检测数据库中 listview 的单击项目的行 ID。 现在应该在 onItemclick 方法中编写什么代码来从数据库中检索正确的行。
感谢您的期待......!
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myDb = new DBHelper(this);
titles = myDb.getAllNames();
times = myDb.getAllTimes();
ArrayAdapter<String> ad = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, titles);
lv = (ListView) findViewById(R.id.listView1);
lv.setAdapter(ad);
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3)
{
}
});
}
最佳答案
首先,您必须编写查询并在数据库中检索 ID。您必须在游标中返回 ID。
引用下面的代码 fragment :
public Cursor fetchAllNames() {
Cursor mCursor = app.myDbHelper.MyDB().query("cardlist", new String[] {"cardid as _id","cardname","carddesc"},
null, null, null, null, null);
try{
if (mCursor != null) {
mCursor.moveToFirst();
}
return mCursor;
}catch(Exception e)
{
return mCursor;
}
}
然后在你的java页面中:
Cursor cursor = myDB.fetchAllNames();
然后您可以通过以下方式获取数据库ID:
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3)
{
if(cursor!=null){
System.out.println("position===>"+position);
if(cursor.moveToFirst()){
cursor.moveToPosition(position);
String cardid = cursor.getString(cursor.getColumnIndex("_id"));
}
}
}
});
您将在字符串 cardid 中获得数据库 ID。如果您使用 SimpleCursorAdapter,则必须使用 _id,否则您必须替换 _id 为代表您在 sqlite 数据库中的 id 的列名。
关于android - 在 ListView 中单击项目时,如何获取 sqlite 数据库中表的行 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27702638/