Fragment1中的Menu方法是从Fragment2调用的

时间:2012-11-04 19:04:43

标签: android android-fragments android-viewpager

我有一个MainActivity,它保存对FragmentAdapter和ViewPage的引用。 在此活动中,我将两个片段添加到List,然后将此列表添加到FragmentAdapter:

fragments.add(Fragment.instantiate(this, Fragment1.class.getName()));       
fragments.add(Fragment.instantiate(this, Fragment2.class.getName()));

现在,我成功地能够浏览这两个片段。实际上,它们都是ListFragments。在每个片段中,我列出了许多项目。

对于每个项目,我可以点击并按住菜单项。

问题出现在Fragment1上,public boolean onContextItemSelected(MenuItem item)在Fragment1中被调用成功(在此片段中添加了断点)。

在Fragment2中进行相同的测试时,会调用Frag1的断点,而不是来自Frag2。显然,Frag1中的数据显示在Frag2中。

有人见过这个吗?

我在这两个片段中实例化菜单:

@Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, v, menuInfo);
        menu.add(Menu.NONE, R.id.share, Menu.NONE, getString(R.string.share));
        menu.add(Menu.NONE, R.id.delete, Menu.NONE, getString(R.string.delete_all));
    }

此致 菲利普

1 个答案:

答案 0 :(得分:2)

基本上,无论哪个片段首先被实例化都将获得优先权。有关使用invalidateOptionsMenu的解决方案,请参阅this链接。基本上,选项菜单将一直存在,直到你告诉android它是无效的。在较旧的系统上,您可以更改onPrepareOptionsMenu中的菜单,但因为操作栏中包含来自选项菜单的图标,您需要完全销毁它。

因此,当您翻页到新片段时,只需使选项菜单无效即可。对于旧设备,请检查onParepareOptionsMenu以查看可见的片段并显示这些选项。