有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我没法让它发挥作用,我已经浏览了很多帖子,我真的很绝望,因为我必须在后天之前完成这篇文章。问题如下:

我有一个包含数据库条目的列表视图。可以长时间点击它们来调用contextMenu。在上下文菜单中,我可以删除或编辑条目,为此,我需要所选项目的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);
  }
}

现在我的问题是,我从info获得的id总是0。这真的很奇怪,因为它在我改变布局之前就已经起作用了,我在同一个屏幕上的两个选项卡中运行了相同的活动。这可能是原因吗


共 (1) 个答案

  1. # 1 楼答案

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

    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终端从应用程序中删除数据库对象,因为扩展onCreate的类的SQLiteOpenHelper方法不会在数据库已经存在时触发——它只会在不存在时触发,因此在进行更正后删除数据库很重要,然后重新运行应用程序

    我希望这能有所帮助