调用FragmentManager.replace()

时间:2015-08-10 19:40:17

标签: android android-fragments android-actionbar android-menu fragmenttransaction

我有一个Toolbar被用作ActionBar,有两个项目。我只希望一次显示一个因为它们互相替换。问题是当我替换Fragment时,它会调用onCreateOptionsMenu并再次膨胀菜单,这意味着将显示相同的操作按钮,即使另一个先前在{{1 }}。我需要更改ActionBarActionBar的所有内容或显示新的FragmentsFragment)。所以我的问题是如何在显示新片段时调用FragmentManager.FragmentTransaction.replace()

我无法使用onCreateOptionsMenu,因为我仍然需要它来重新定位方向更改。关于如何处理矿化的任何建议都会改变我的情况?

我可以发布代码,但它似乎更具概念性,我不确定它会有所帮助。

3 个答案:

答案 0 :(得分:1)

我解决了这个问题,而不是不调用onCreateOptionsMenu,我手动将这些项目添加到我的菜单中。

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    boolean refreshVisible;

    if (refreshItem != null && refreshItem.isVisible()){//is being displayed prior to inflation
        refreshVisible = true;
    }else if (refreshItem == null){//it's null so the menu has never been created
        refreshVisible = true;
    }else {//it's not null and invisibe, other icon was being displayed
        refreshVisible = false;
    }

    menu.clear();//clear menu so there are no duplicate or overlapping icons
    getMenuInflater().inflate(R.menu.main, menu);//inflate menu
    refreshItem = menu.findItem(R.id.refresh);
    useDataItem = menu.findItem(R.id.use_data);
    refreshItem.setVisible(refreshVisible);//if menu is being created for first time or item was previously visible, then display this item
    useDataItem.setVisible(!refreshVisible);//display this item if not displaying other

    return true;

}

答案 1 :(得分:0)

我会摆弄onPrepareOptionsMenu钩子。如果您可以检测到您的菜单不应该显示,那么您应该从那里开始返回false。每个文档:

  

准备要显示的屏幕标准选项菜单。每次显示菜单时都会调用此菜单。您可以使用此方法有效地启用/禁用项目或以其他方式动态修改内容。

  

您必须返回true才能显示菜单;如果你返回false,它将不会显示。

答案 2 :(得分:0)

您可以在片段中调用setHasOptionsMenu(false);

这将阻止在添加该片段时调用onCreateOptionsMenu()