android - 在 ListView 中单击项目时,如何获取 sqlite 数据库中表的行 ID

标签 android sqlite listview android-listview onitemclicklistener

我的代码在这里…………!当从 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/

相关文章:

Android 蓝牙 SCO 与日产汽车 radio

android - LocationManager 和 LOCATION_SERVICE

java - 如何在android中的sqlite数据库中存储html页面

android - 链接范围从 ListView 的 convertView 中丢失

android - "Could not find the XXX.apk"控制台中的消息,同时使用链接的 Android 库启动应用程序

android - 从哪里获得 TwitterCore?

database - 我应该使用平面文件还是数据库来存储 Android 上随机报价应用程序的报价?

php - PDO 将数据库类型更改为 SQLITE 会引发错误

java - ListView 中特定项目的 OnClick

android - 复选框无法与 ListView 一起正常工作