Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在if块中使用手动创建的id而不是系统id_Android_Contextmenu - Fatal编程技术网

Android 在if块中使用手动创建的id而不是系统id

Android 在if块中使用手动创建的id而不是系统id,android,contextmenu,Android,Contextmenu,TLDR: /** * Opens the context menu(s) */ @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); MenuInflater inflater = getMenuInflater(); if(v.getId

TLDR:

/**
 * Opens the context menu(s)
 */
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo)
{
    super.onCreateContextMenu(menu, v, menuInfo);
    MenuInflater inflater = getMenuInflater();
    if(v.getId() == 2131427332)
    {
        inflater.inflate(R.menu.share_menu, menu);
    }
    else if(v.getId() == 2131427329)
    {
        inflater.inflate(R.menu.options_menu, menu);
    }
}
我更愿意使用'2131427332'的'shareButton'图标来指出现
onCreateContextMenu()
的点击项目。我该怎么做

说明:

/**
 * Opens the context menu(s)
 */
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo)
{
    super.onCreateContextMenu(menu, v, menuInfo);
    MenuInflater inflater = getMenuInflater();
    if(v.getId() == 2131427332)
    {
        inflater.inflate(R.menu.share_menu, menu);
    }
    else if(v.getId() == 2131427329)
    {
        inflater.inflate(R.menu.options_menu, menu);
    }
}
我有一个带有两个上下文菜单的活动。因此,在我的
onCreateContextMenu()
方法中,我检索单击的项目的id,并放大相应的菜单

但是-我知道的唯一方法是使用
v.getId()-这看起来很糟糕/奇怪,因为我在if块中使用的是系统生成的id,而不是我自己创建的id。有更好的方法吗?我会改变吗?我可以使用XML项的id而不是自动生成的id吗

代码:

/**
 * Opens the context menu(s)
 */
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo)
{
    super.onCreateContextMenu(menu, v, menuInfo);
    MenuInflater inflater = getMenuInflater();
    if(v.getId() == 2131427332)
    {
        inflater.inflate(R.menu.share_menu, menu);
    }
    else if(v.getId() == 2131427329)
    {
        inflater.inflate(R.menu.options_menu, menu);
    }
}

您可以使用您的ID引用自动生成的R.class

例如:

if(v.getId() == R.id.my_custom_id) 
{

}
正如我记得不久前R.class中的id是静态的final,但google团队将其更改为仅静态的,所以现在您不能在switch语句中使用它们,但可以在代码中随意使用它们


找到了!这里有更多信息:

因此您有一个名为shareButton的视图

您需要做的是替换此:

if(v.getId() == 2131427332) {
        inflater.inflate(R.menu.share_menu, menu);
    }
为此:

if(v.equals(shareButton)) {
        inflater.inflate(R.menu.share_menu, menu);
    }

就这么简单

我认为我的minsdkversion8可以做到这一点,所以我只能在switch语句中使用整数,对吗?@Dave switch和if都可以工作,它与API级别无关。库项目只有一个问题:@brillenheini-awesome ty-将其更改为switch语句,效果非常好!