Android 如何在工具栏中隐藏菜单项(查看寻呼机、嵌套片段)

Android 如何在工具栏中隐藏菜单项(查看寻呼机、嵌套片段),android,android-fragments,android-viewpager,Android,Android Fragments,Android Viewpager,我的问题是: 我有一个活动,带有工具栏和查看页面,其中包含三个主要片段,其中两个具有嵌套的片段: [1] RootMapFrag, MarkerMapFrag 热图 [2] 根列表框, ListFrag WebViewFrag [3] 格拉夫弗拉格 在ListFragment中,我创建了带有搜索按钮的菜单,用于过滤回收器视图,该菜单在片段中实现。在我的整个应用程序中,只有一个按钮在ListFragment中初始化搜索按钮工作正常,但在[1]和[3]选项卡上也可见。有没有办法从这些选项

我的问题是:

我有一个
活动
,带有
工具栏
查看页面
,其中包含三个主要
片段
,其中两个具有嵌套的
片段

  • [1] RootMapFrag,
    • MarkerMapFrag
    • 热图
  • [2] 根列表框,
    • ListFrag
    • WebViewFrag
  • [3] 格拉夫弗拉格
ListFragment
中,我创建了带有搜索按钮的菜单,用于过滤
回收器视图
,该菜单在
片段
中实现。在我的整个应用程序中,只有一个按钮在
ListFragment
中初始化<代码>搜索按钮工作正常,但在[1]和[3]选项卡上也可见。有没有办法从这些选项卡中隐藏它?我试图在
片段
中通过设置
menu.getItem(R.id.action\u search).setVisible(false)
invalidateOptionsMenu()
来实现
设置选项菜单(true)
onPrepareOptionsMenu
,它们不需要这个菜单项,但没有任何用处。有没有办法做到这一点?这是我的密码:

RootListFragment

public class RootListFragment extends Fragment {

    private FragmentManager fragmentManager;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_root_list, container, false);

        fragmentManager = getChildFragmentManager();
        fragmentManager.beginTransaction().add(R.id.root_list_fragment, new ListFragment()).commit();

        return view;
    }
}
public class ListFragment extends Fragment implements SearchView.OnQueryTextListener {

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

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_list, container, false);

        ...

        return view;
    }

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

        MenuItem item = menu.findItem(R.id.action_search);
        SearchView searchView = (SearchView) MenuItemCompat.getActionView(item);
        searchView.setOnQueryTextListener(this);

        MenuItemCompat.setOnActionExpandListener(item,
                new MenuItemCompat.OnActionExpandListener() {
                    @Override
                    public boolean onMenuItemActionExpand(MenuItem item) {
                        return true;
                    }

                    @Override
                    public boolean onMenuItemActionCollapse(MenuItem item) {
                        return true;
                    }
                });
    }
}
public class GraphFragment extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_graph, container, false);

        ...

        return view;
    }

    @Override
    public void onPrepareOptionsMenu(Menu menu) {
        menu.getItem(R.id.action_search).setVisible(false);
        super.onPrepareOptionsMenu(menu);
    }
}
ListFragment

public class RootListFragment extends Fragment {

    private FragmentManager fragmentManager;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_root_list, container, false);

        fragmentManager = getChildFragmentManager();
        fragmentManager.beginTransaction().add(R.id.root_list_fragment, new ListFragment()).commit();

        return view;
    }
}
public class ListFragment extends Fragment implements SearchView.OnQueryTextListener {

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

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_list, container, false);

        ...

        return view;
    }

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

        MenuItem item = menu.findItem(R.id.action_search);
        SearchView searchView = (SearchView) MenuItemCompat.getActionView(item);
        searchView.setOnQueryTextListener(this);

        MenuItemCompat.setOnActionExpandListener(item,
                new MenuItemCompat.OnActionExpandListener() {
                    @Override
                    public boolean onMenuItemActionExpand(MenuItem item) {
                        return true;
                    }

                    @Override
                    public boolean onMenuItemActionCollapse(MenuItem item) {
                        return true;
                    }
                });
    }
}
public class GraphFragment extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_graph, container, false);

        ...

        return view;
    }

    @Override
    public void onPrepareOptionsMenu(Menu menu) {
        menu.getItem(R.id.action_search).setVisible(false);
        super.onPrepareOptionsMenu(menu);
    }
}
GraphFragment

public class RootListFragment extends Fragment {

    private FragmentManager fragmentManager;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_root_list, container, false);

        fragmentManager = getChildFragmentManager();
        fragmentManager.beginTransaction().add(R.id.root_list_fragment, new ListFragment()).commit();

        return view;
    }
}
public class ListFragment extends Fragment implements SearchView.OnQueryTextListener {

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

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_list, container, false);

        ...

        return view;
    }

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

        MenuItem item = menu.findItem(R.id.action_search);
        SearchView searchView = (SearchView) MenuItemCompat.getActionView(item);
        searchView.setOnQueryTextListener(this);

        MenuItemCompat.setOnActionExpandListener(item,
                new MenuItemCompat.OnActionExpandListener() {
                    @Override
                    public boolean onMenuItemActionExpand(MenuItem item) {
                        return true;
                    }

                    @Override
                    public boolean onMenuItemActionCollapse(MenuItem item) {
                        return true;
                    }
                });
    }
}
public class GraphFragment extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_graph, container, false);

        ...

        return view;
    }

    @Override
    public void onPrepareOptionsMenu(Menu menu) {
        menu.getItem(R.id.action_search).setVisible(false);
        super.onPrepareOptionsMenu(menu);
    }
}
以下是我的应用程序中的gif:


片段中,如果您不想显示任何菜单选项,则需要
设置选项菜单(false)onCreate()
中的code>,如下所示:

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