0

您好,我正在创建数据库应用程序,其中所有记录都显示在数据库的 listview 中,当用户长按 listview 所选项目应从 listview 显示时,我已向每个项目添加 id,并且我正在删除从 listview 问题中选择的 id 项目是当项目被删除并且我插入新项目时,它的 id 会增加并且它与 listview 所选项目不匹配,请帮助我提前感谢...

这是listview上用户长按的代码

list.setOnItemLongClickListener(new OnItemLongClickListener() {

        @Override
        public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
                int arg2, long arg3) {

            View v=findViewById(R.id.groupList);
            //activity.openContextMenu(v);

            helper.deleteName((arg2+1));
            c.requery();                
            return true;
        }
    });

这是从数据库中删除项目的逻辑

class DatabaseHelper{

    public void insertGroup(String name){
        db.execSQL("insert into GroupNames (names) values('"+name+"')");
    }

    public Cursor selectAll(){
        return db.rawQuery("select * from GroupNames", null);
    }

    public String getName(Cursor c){
        return c.getString(0);
    }

    public void deleteName(int i){

        c.moveToPosition(i);
        db.execSQL("delete from GroupNames where _id="+i);          
    }
}
4

2 回答 2

0

arg2不是您的物品的 ID,请查看官方文档以了解它是什么!

不是你的arg3item在数据库中的ID,而是Android资源的行ID(即R.id.xxx),所以不能只使用参数给定的数据onItemLongClick()

知道了这一点,您可以发现该行helper.deleteName((arg2+1));不正确并且没有任何意义:arg2+1对您的数据库绝对没有任何意义。

一个解决方案(我认为不是最好的)应该是在您的项目视图中包含一个不可见_id的字段,存储数据库的实际字段。然后,当检测到长按时,您会取回该值并将其传递给helper.deleteName().

于 2013-06-05T09:02:36.567 回答
0

我认为你应该记录你的代码以便你低估,什么数据去哪里了?

在下面的代码中,当我删除某些内容时,我会做出回应,以便我了解它是否被删除。

 public int deleteAlarm(long unique_id) {
              db = this.getWritableDatabase();
              int delete = db.delete(ALARM_TABLE_NAME, "unique_id=" + unique_id, null);
              db.close();
              return delete;
        } 
于 2013-06-05T09:17:38.620 回答