片段和活动

时间:2015-12-18 19:00:57

标签: android android-toolbar android-menu

我正在使用Appcompat工具栏,它在Activity中有一个带自定义操作视图的MenuItem。当我切换到片段时,我有单独的工具栏,我不希望活动MenuItem以片段形式显示,因此我将其可见性设置为false。

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {

    MenuItem menuItem = menu.findItem(R.id.action_notification);
    menuItem.setVisible(false);
    super.onCreateOptionsMenu(menu, inflater);
}

到目前为止一切正常。

但是当我回到活动时,同样的MenuItem是不可见的。这就是我如何让它再次可见。因为我在onResume()中使菜单无效而onCreateOptionsMenu被调用,但是MenuItem不可见。

@Override
public boolean onCreateOptionsMenu(Menu menu) {

    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.dashboard_actionbar_actions, menu);
    MenuItem menuItem = (MenuItem) menu.findItem(R.id.action_notification);
    menuItem.setVisible(true).setEnabled(true);
    return super.onCreateOptionsMenu(menu);
}  

我在这里错过了什么吗?

2 个答案:

答案 0 :(得分:1)

您必须在片段中设置不同的菜单:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setHasOptionsMenu(true);
}

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    // TODO Add your menu entries here
    super.onCreateOptionsMenu(menu, inflater);
}

如果您想隐藏片段中的菜单,请使用setHasOptionsMenu(false)

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setHasOptionsMenu(false);
}

当你说切换到片段时你是否在相同的Activity上切换片段?如果是这样,最好的方法是从Activity中删除菜单代码并在Fragment中实现它,这样就可以在Fragment级别控制菜单。

答案 1 :(得分:0)

Javadocs说:

  

public boolean onCreateOptionsMenu(菜单菜单)

     

仅在选项菜单第一次调用时调用一次   显示。要在每次显示菜单时更新菜单,请参阅   onPrepareOptionsMenu(菜单)

因此,如果您只是隐藏片段,则不会重新创建活动(但不清楚,什么是从活动和片段“切换”,片段无法在没有活动的情况下显示),因此此函数“onCreateOptionsMenu”将不会再次打电话。

最简单的方法是将MenuItem保存为活动中的成员变量,并使用方法“showMenu / hideMenu”。当你改变片段时,打电话给他们。