Android 动态更改菜单项

Android 动态更改菜单项,android,menu,Android,Menu,我见过这个问题,但它对我没有帮助。 问题是:我正在解析一个网站,一些帖子是个人帖子,另一些是团体帖子。如果是一篇小组文章,我想在上下文菜单中显示两个菜单项-“显示作者的博客”和“显示小组的页面”,如果只是个人文章,则只能显示“显示作者的博客”菜单项 ```` @覆盖 public void onCreateContextMenu(ContextMenu菜单、视图v、ContextMenuInfo菜单信息){ super.onCreateContextMenu(menu,v,menuInfo);

我见过这个问题,但它对我没有帮助。
问题是:我正在解析一个网站,一些帖子是个人帖子,另一些是团体帖子。如果是一篇小组文章,我想在上下文菜单中显示两个菜单项-“显示作者的博客”和“显示小组的页面”,如果只是个人文章,则只能显示“显示作者的博客”菜单项

````

@覆盖
public void onCreateContextMenu(ContextMenu菜单、视图v、ContextMenuInfo菜单信息){
super.onCreateContextMenu(menu,v,menuInfo);
添加(0,1,0,“打开作者的博客”);
添加(0,2,0,“打开组的页面”);
}
@凌驾
公共布尔值onContextItemSelected(MenuItem项){
AdapterContextMenuInfo menuInfo=(AdapterContextMenuInfo)项。getMenuInfo();
开关(item.getItemId()){
案例1:
> 
打破
}
返回true;
}  
````


我不明白,如何在OnCreateContextMenu方法中获取此(MenuItem项)。我希望通过这种方式,我能够将一些菜单项设置为可见或不可见。

您只需根据您的代码调整前面的答案即可

onCreateContextMenu
回调在创建ContextMenu之前触发,您需要在此回调中选择创建(或不创建)ContextMenu的项。因此,您需要做的是检索与适配器的单元格(触发回调的单元格)关联的对象,然后根据帖子的类型以编程方式创建菜单项

@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);

    AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo;
    Post post = (Post) myListView.getItemAtPosition(info.position);

    if (post.getPostType() == PostType.Personal) {
        menu.add(0, 1, 0, "Show author's blog");
    else if (post.getPostType() == PostType.Group) {
        menu.add(0, 1, 0, "Show author's blog");
        menu.add(0, 2, 0, "Show group's page");
    }
}
我不明白,我怎样才能把这个(菜单项)放进去 OnCreateContextMenu方法。我希望通过这种方式我能够 某些菜单项是否可见

要获取特定的
MenuItem
,您可以使用:

menu.getItem(<position>);
menu.findItem(<id>);

然后根据获得的信息,您可以在ContextMenu中显示或隐藏项目。

我的上下文菜单是由listview创建的,其中一些元素可能是群贴,一些是个人贴。因此,上下文菜单每次都会根据posttype正确地重新创建?是的,每次长按listView的某个元素时都会重新创建上下文菜单。因此,您需要找到listView的哪一行被选中,找到这一行是否与组或个人帖子相关联,然后在您的contextMenu中只添加您需要的项目。谢谢您的解释
menu.getItem(<position>);
menu.findItem(<id>);
AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo;
View child = info.targetView;