在if块中使用手动创建的id而不是system id

时间:2012-12-05 21:27:22

标签: android contextmenu

TLDR:

当引用点击的项目onCreateContextMenu()时,我宁愿使用'shareButton'intead of'2131427332'。我怎么能这样做?

解释

我有一个带有两个上下文菜单的活动。因此,在我的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);
    }
}

2 个答案:

答案 0 :(得分:3)

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

例如:

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

}

正如我记得前一段时间R.class中的ID是静态最终版,但谷歌团队将其更改为静态,所以现在你不能在switch语句中使用它们,但可以随意在代码中使用它们。

发现它!更多相关信息:http://tools.android.com/tips/non-constant-fields

答案 1 :(得分:0)

所以你有一个名为shareButton的视图。

你需要做的就是替换它:

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

用这个:

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

这很简单!