我有一个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));
}
此致 菲利普
答案 0 :(得分:2)
基本上,无论哪个片段首先被实例化都将获得优先权。有关使用invalidateOptionsMenu的解决方案,请参阅this链接。基本上,选项菜单将一直存在,直到你告诉android它是无效的。在较旧的系统上,您可以更改onPrepareOptionsMenu中的菜单,但因为操作栏中包含来自选项菜单的图标,您需要完全销毁它。
因此,当您翻页到新片段时,只需使选项菜单无效即可。对于旧设备,请检查onParepareOptionsMenu以查看可见的片段并显示这些选项。