我看过this问题,但这对我没有帮助。
问题是:我正在解析一个网站,一些帖子是个人帖子,另一个是小组帖子。如果是团体帖子,我想在上下文菜单中显示2个menuItems - “显示作者的博客”和“显示组的页面”,如果它只是个人帖子,则只显示“显示作者的博客”菜单项。
````
@Override
public void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
menu.add(0, 1, 0, "Open author's blog" );
menu.add(0, 2, 0, "Open group's page");
}
@Override
public boolean onContextItemSelected(MenuItem item) {
AdapterContextMenuInfo menuInfo = (AdapterContextMenuInfo)item.getMenuInfo();
switch(item.getItemId()) {
case 1:
<< some code >>
break;
}
return true;
}
````
我无法理解,如何在OnCreateContextMenu方法中获取此(MenuItem项)。我希望通过这种方式我可以设置一些菜单项是否可见。
答案 0 :(得分:1)
您只需要将之前的答案调整为您的代码。
在创建ContextMenu之前触发onCreateContextMenu
回调,并且在此回调中您需要选择创建(或不创建)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");
}
}
答案 1 :(得分:1)
我无法理解,我怎么能得到这个(MenuItem项目) OnCreateContextMenu方法。我希望通过这种方式我能够设定 一些菜单项可见或不可用。
要获得具体的MenuItem
,您可以使用:
menu.getItem(<position>);
menu.findItem(<id>);
其中第一种方法使用菜单中项目的位置(从上到下从零到n计算)。所以在你的情况下,第一项(作者)的索引为0,第二项的索引为1。
如果您在XML文件中指定了菜单,则第二种方法非常有用 - 那么您可以根据其ID获取项目。
此外,为了从显示菜单的元素中获取一些额外信息,您可以使用:
AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo;
View child = info.targetView;
然后根据获得的信息,您可以在ContextMenu中显示或隐藏项目。