java - contextMenu 中所选项目的 id 始终为 0

标签 java android database eclipse contextmenu

我无法让这个工作,我浏览了很多帖子,我真的很绝望,因为我必须在后天完成这个工作。问题如下:

我有一个包含数据库条目的 ListView 。可以长按它们来调用上下文菜单。在上下文菜单中,我可以删除或编辑条目,为此我需要所选项目的 ID。

@Override
public void onCreateContextMenu(ContextMenu menu, View v,
                                ContextMenuInfo menuInfo) {
  super.onCreateContextMenu(menu, v, menuInfo);
  MenuInflater inflater2 = getMenuInflater();
  inflater2.inflate(R.menu.edit_grade_menu, menu);
}

@Override
public boolean onContextItemSelected(MenuItem item) {
  AdapterContextMenuInfo info =  (AdapterContextMenuInfo) item.getMenuInfo();
  int id = (int) info.id;
  switch (item.getItemId()) {
  case R.id.edit_grade:
    Intent i = new Intent(this, AddGradeActivity.class);
    i.putExtra(GradesDbAdapter.KEY_ROWID, linkSubject);

    // putExtra edit, so addGradeActivity knows it has to fill views with values to edit grade
    i.putExtra("edit", true);
    i.putExtra(GradesDbAdapter.KEY_GRADE, id);
    this.startActivity(i);
    finish();

    return true;
  case R.id.del_grade:
      myDbHelper.deleteGradeEntry(id, semester);
      // filldata to refresh listview
      fillData();
    return true;
  default:
    return super.onContextItemSelected(item);
  }
}

现在我的问题是,我从信息中获得的这个 id 始终是 0。这真的很奇怪,因为它在我更改布局之前就已经起作用了,我在同一屏幕上的 2 个选项卡中运行了相同的 Activity 。难道是这个原因?

最佳答案

我也遇到了同样的问题。它没有发生在实现 ListView 的上下文菜单/类中,而是在创建数据库表 _id 列期间发生。使用此语法时:

db.execSQL("CREATE TABLE TABLE_NAME(_id INTEGER AUTO INCREMENT PRIMARY KEY,  TITLE TEXT, VALUE REAL);");

AdapterView.AdapterContextMenuInfo.id 始终返回 0

但是,如果使用此语法:

db.execSQL("CREATE TABLE TABLE_NAME(_id INTEGER PRIMARY KEY AUTOINCREMENT,  TITLE TEXT, VALUE REAL);");

AdapterView.AdapterContextMenuInfo.id 始终返回正确的 ID。

所以有区别:

_id INTEGER AUTO INCREMENT PRIMARY KEY 

_id INTEGER PRIMARY KEY AUTOINCREMENT

第二个有效,第一个无效。调试起来很困难,因为两者在语法上都是正确的。

另一件重要的事情是,在再次重新运行应用程序之前,需要通过 adb 终端从应用程序中删除数据库对象,因为扩展 SQLiteOpenHelper 的类的 onCreate 方法确实如此如果数据库已存在,则不会触发 - 仅当数据库不存在时才会触发,因此在进行更正后删除数据库,然后重新运行应用程序非常重要。

希望对您有所帮助。

关于java - contextMenu 中所选项目的 id 始终为 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8901669/

相关文章:

java - 有没有办法在用 Java 打开终端时指定主文件夹?

java - Tomcat 服务器未在 Eclipse 中运行项目

java - 如何动态创建XML(java)?

database - 什么会导致记录在 Postgres 的特定索引中丢失?

java - 使用 jquery 打开新窗口

java - 如何使用 Exchangeratesapi.io 和 okhttp 更改汇率基础货币,并在微调器中选择所有基础货币?

android - 滚动时混淆的 Gridview 图像

android - 在代码中为 textview 设置样式,android

具有快速基本查询和 5 亿项计数的数据库存储

sql - 如何通过避免循环来优化此 t-sql 脚本代码?