如何从片段中隐藏工具栏上的OptionMenu?

时间:2019-08-10 09:24:30

标签: java android android-toolbar android-menu optionmenu

我在HomeActivity中增加选项菜单。但是我需要选项菜单显示在某些fragments中,而隐藏在其他菜单中。

我尝试使用setHasOptionsMenu(false);片段方法中的onCreate()行。

这是optionmenu中的HomeActivity按钮声明

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    //initialize button
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.option_menu, menu);
    return true;
}

//action when i press it
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        // action with ID action_refresh was selected
        case R.id.toolbar_acquista:
            Toast.makeText(this, "Acquisto", Toast.LENGTH_SHORT)
                    .show();
            break;
    }

    return true;
}

我正在尝试在fragment选项菜单clickable中使它可见,而在其他unclickable中使其不可见。

3 个答案:

答案 0 :(得分:1)

第一个Clear Menu喜欢

@Override 
public void onPrepareOptionsMenu(Menu menu) {
    menu.clear();
}

,然后在片段方法setHasOptionsMenu(true);中作为onCreate() TRUE

答案 1 :(得分:0)

不要在家庭活动中膨胀菜单,而是在片段内部膨胀菜单

像这样

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.menu_sample, menu);
    super.onCreateOptionsMenu(menu,inflater);
}

这样,只有当片段可见时,菜单项才会在片段中膨胀

答案 2 :(得分:0)

首先在片段中覆盖创建方法,然后编写 setHasOptionsMenu(true)

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

然后在Fragment中覆盖OnPrepareOptionMenu方法,然后编写放置在其中的代码。 我只隐藏搜索菜单。同样,您可以根据自己的选择隐藏所有菜单项或选择项。

   @Override
public void onPrepareOptionsMenu(Menu menu) {
    MenuItem item=menu.findItem(R.id.menu_search);
    if(item!=null)
        item.setVisible(false);
}