1

TLDR:

当提到点击的项目时,我宁愿使用“shareButton”而不是“2131427332” onCreateContextMenu()。我怎样才能做到这一点?

解释:

我有一个带有两个上下文菜单的活动。因此,在我的onCreateContextMenu()方法中,我正在检索所单击项目的 id,并膨胀相应的菜单。

但是 - 我知道如何做到这一点的唯一方法是使用v.getId();- 这似乎很糟糕/奇怪,因为我在 if 块中使用系统生成的 id 而不是我自己创建的 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);
    }
}
4

2 回答 2

3

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

例如:

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

}

我记得前段时间 R.class 中的 ids 是 static final 的,但谷歌团队将其更改为 static 所以现在你不能在 switch 语句中使用它们,但可以在你的代码中随意使用它们。

找到了!更多关于这里:http ://tools.android.com/tips/non-constant-fields

于 2012-12-05T22:02:02.540 回答
0

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

你需要做的是替换这个:

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

有了这个:

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

就那么简单!

于 2012-12-05T22:13:37.723 回答