我有一个上下文菜单。函数v.getId()应该返回id,但不是 - 而是返回'false'。
这是我的代码:
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
menu.setHeaderTitle("Options");
menu.add(0, v.getId(), 0, v.getId());
menu.add(0, v.getId(), 0, "Save Notification");
}
@Override
public boolean onContextItemSelected(MenuItem item) {
if(item.getTitle()=="Save Ringtone"){function1(item.getItemId());}
else if(item.getTitle()=="Save Notification"){function2(item.getItemId());}
else {return false;}
return true;
}
public void function1(int id){
//Stuff
}
public void function2(int id){
if (id == R.raw.tedcake){
Toast.makeText(this, id, Toast.LENGTH_SHORT).show();
}
按钮已在代码中的其他位置注册了上下文菜单。
为什么它会返回false?
感谢。
答案 0 :(得分:2)
我有同样的问题...在文件夹res / values中你应该有一个文件ID,每个项目有四个属性(名称,类型,格式,值)。在我的情况下,字段“值”是“假”
答案 1 :(得分:1)
v.getId()
无法返回false
。它返回一个整数,它不是布尔永远。menu.add(0, v.getId(), 0, v.getId());
。您在最后一个参数中传递v.getId()
,这将导致问题(因为它正在等待String资源标识符,而不是视图资源标识符)。也许你的意思是menu.add(0, v.getId(), 0, "Save Ringtone");
?关于你的问题:“为什么我会变错?”。这是因为:
if(item.getTitle()=="Save Ringtone"){function1(item.getItemId());}
else if(item.getTitle()=="Save Notification"){function2(item.getItemId());}
else return false;
这是新Java开发人员的常见问题。问题在于:item.getTitle()=="Save Ringtone"
;特别是问题是==
。 这不是你比较Java中对象的方式。您必须以这种方式使用equals
方法:
if(item.getTitle().equals("Save Ringtone")){function1(item.getItemId());}
else if(item.getTitle().equals("Save Notification")){function2(item.getItemId());}
else return false;
如果对对象使用==
运算符,则要比较对象的引用,而不是对象。
答案 2 :(得分:1)
view.getId()
返回一个int,而不是false。如果视图实际上没有ID,则返回NO_ID,它是一个等于-1的常量。我在您的代码中看到的一个问题是您使用==比较字符串。你应该使用equals代替。如果您想了解更多信息,那么有很多相关的SO帖子。
答案 3 :(得分:1)
这是因为android中的大多数功能都采用字符串而不是 int ,吐司也是如此。 尝试 String.valueOf(view.getId()) to toast你会看到id。欢迎你
答案 4 :(得分:0)
我遇到了类似的问题。 view.getID()
将始终返回一个整数,所以我决定看看如果我将整数转换为toast中的字符串会发生什么。此方法将显示ID。我相信你看到错误的原因是因为当你提供整数而不是char序列时toast出错了。