java contextmenu_关于java:从contextMenu中选择的项目的ID始终为0

我无法解决这个问题,我浏览了许多帖子,但我实在感到非常绝望,因为我必须在第二天之前完成此操作。 问题如下:

我有一个listView包含来自数据库的条目。 可以长按它们以调用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);

}

}

现在我的问题是,我从信息中获取的ID始终为0。这真的很奇怪,因为在更改布局之前它已经起作用了,我在同一屏幕的2个选项卡中运行了相同的活动。 这可能是原因吗?

item.getItemId()返回错误的值吗?或item.id?检查此链接配合stackoverflow.com/questions/2453620/

无论我选择哪个条目,info.id()都将返回0。

你能显示你的R.menu.edit_grade_menu布局吗

尝试在onCreateContextMenu()中添加两行menu.add(0,0,0," Edit Grade"); menu.add(0,1,1,"编辑成绩");并查看是否可以使用OR menu.add(0,v.getId(),0," Edit Grade"); menu.add(0,v.getId(),0,"编辑成绩");

inflater2.inflate(R.menu.edit_grade_menu, menu); menu.add(0, 0, 0,"Edit Grade"); menu.add(0, 1, 1,"Delete Grade");我尝试了此操作,但是当我登录与menu.add(0, v.getId(), 0,"Edit Grade"); menu.add(0, v.getId(), 0,"Edit Grade");相同的info.id时仍然得到0

这是有关ContextMenu创建的一个很好的例子secretthcopter.com/blog/2010/04/

那info.position呢?

这是你的答案人-stackoverflow.com/questions/6208738/adaptercontextmenuinfo-id

那真的没有帮助,因为我的问题是我无法从被"长按"的元素中读取ID,而我确实需要此ID,因为我必须在下一个屏幕上从数据库中获取数据。

好,上下文菜单是长按,而您依赖位置而不是ID以及它的书写方式,即使用CursorAdapter时,它是Cursor内部的_id列的值。因此,基本上,您在填充可单击ListView时将需要使用CursorAdapter。也许您使用其他东西。

非常感谢,我发现了错误,问题出在我的数据库中,不知何故主键字段不再自动递增,所有条目的ID为0 ...我应该早些猜到了,但是令人困惑,因为昨天工作正常...反正谢谢:)

我有同样的问题。 它不是在实现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方法不会在数据库已经存在的情况下触发-仅在数据库不存在时才触发 't,因此在更正后删除数据库,然后重新运行该应用程序很重要。

希望对您有所帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值