Android - v.getId()在Context菜单中返回'false'

时间:2010-10-16 17:07:49

标签: android contextmenu

我有一个上下文菜单。函数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?

感谢。

5 个答案:

答案 0 :(得分:2)

我有同样的问题...在文件夹res / values中你应该有一个文件ID,每个项目有四个属性(名称,类型,格式,值)。在我的情况下,字段“值”是“假”

答案 1 :(得分:1)

  1. v.getId()无法返回false。它返回一个整数,它不是布尔永远
  2. 另一方面,这应该做什么?:menu.add(0, v.getId(), 0, v.getId());。您在最后一个参数中传递v.getId(),这将导致问题(因为它正在等待String资源标识符,而不是视图资源标识符)。也许你的意思是menu.add(0, v.getId(), 0, "Save Ringtone");
  3. 关于你的问题:“为什么我会变错?”。这是因为:

    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出错了。