如何隐藏片段上的菜单(正在从布局中替换)?

问题描述 投票:0回答:5

我已经检查并尝试了这里所有可能的代码,但这些代码对我不起作用,因为我只是更换了没有不同工具栏的布局。我正在使用

fragments
NavigationDrawer
navigationdrawer
listview 
,单击列表项时,它会用以下片段替换布局。但是我如何隐藏
menu
或根据出现的不同布局修改它?

android android-activity android-menu
5个回答
49
投票

如果你想从

Fragment
控制选项菜单你需要在onCreate
Fragment
中调用
setHasOptionsMenu

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

然后您可以添加、删除或清除覆盖

onCreateOptionsMenu
的菜单。例如,此代码删除选项菜单中的每个项目:

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

3
投票

对我有用,你可以试试这个代码

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

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



 @Override
    public void onPrepareOptionsMenu(Menu menu) {
        super.onPrepareOptionsMenu(menu);
        menu.findItem(R.id.action_cart).setVisible(false);
        menu.findItem(R.id.action_search).setVisible(false);
        menu.findItem(R.id.overflow).setVisible(false);
    }

1
投票

因为你没有提供你尝试过的东西的代码,所以很难说什么可能有效。

我在一个也有

NavigationDrawer
的应用程序中工作,对我来说,不同之处在于在每个片段的
menu.clear()
中调用
onCreateOptionsMenu

示例代码如下所示:

@Override
public void onCreateOptionsMenu(final Menu menu, final MenuInflater inflater) {
    super.onCreateOptionsMenu(menu, inflater);
    if (!mNavigationDrawerIsOpened) {
        // Clear the menu from menuitems added from other fragments
        menu.clear();

        // Inflate your new menu
        inflater.inflate(R.menu.new_fragment, menu);

        // get the menu items of that new menu
        MenuItem item = menu.findItem(R.id.action_traffic_spinner);
    }
}

0
投票

由于

setHasOptionsMenu()
onCreateOptionsMenu()
现已弃用,您也可以通过以下方式执行此操作:

例如在

onCreateView()
-method你可以删除你的菜单项:

requireActivity().addMenuProvider(new MenuProvider() {
    @Override
    public void onCreateMenu(@NonNull Menu menu, @NonNull MenuInflater menuInflater) {
        menu.removeItem(R.id.menuItemToRemove);
    }
    @Override
    public boolean onMenuItemSelected(@NonNull MenuItem menuItem) {
        return false; //report no menu selection handled
    }
});

onStop()
-方法中,您可以再次添加它:

requireActivity().addMenuProvider(new MenuProvider() {
    @Override
    public void onCreateMenu(@NonNull Menu menu, @NonNull MenuInflater menuInflater) {
        menuInflater.inflate(R.menu.menu_main, menu);
    }
    @Override
    public boolean onMenuItemSelected(@NonNull MenuItem menuItem) {
        return false; //report no menu selection handled
    }
});

0
投票

setHasOptionsMenu()onCreateOptionsMenu() 现已弃用,您也可以使用以下方法执行此操作:

requireActivity().addMenuProvider(new MenuProvider() {
        @Override
        public void onCreateMenu(@NonNull Menu menu, @NonNull MenuInflater menuInflater) {
            menuInflater.inflate(R.menu.menu_reporte,menu);
        }

        @Override
        public boolean onMenuItemSelected(@NonNull MenuItem menuItem) {

            switch(menuItem.getItemId())
            {
                case R.menu.menu_reporte:

                    break;
            }
            return true;
        }
    },getViewLifecycleOwner(), Lifecycle.State.RESUMED);
© www.soinside.com 2019 - 2024. All rights reserved.