0

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

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

现在,我可以成功地滑过这两个片段。实际上,它们都是ListFragments。在每个片段中,我列出了许多项目。

对于每个项目,我可以单击按住,然后会出现一个菜单项。

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

在 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));
    }

问候, 费利佩

4

1 回答 1

2

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

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

于 2012-11-04T19:27:50.177 回答