【问题标题】:Android - onCreateOptionsMenu - Can't disable MenuItem from fragmentAndroid - onCreateOptionsMenu - 无法从片段中禁用 MenuItem
【发布时间】:2015-11-30 12:44:21
【问题描述】:

我正在尝试从我的导航抽屉中禁用菜单项 片段,但它不会工作......

片段代码:

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

    setHasOptionsMenu(true);
    return rootView;
}

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

        menu.findItem(R.id.nav_amount).setEnabled(false);
        menu.findItem(R.id.nav_return).setEnabled(false);
        menu.findItem(R.id.nav_about).setEnabled(false);
        menu.findItem(R.id.nav_settings).setEnabled(false);

        super.onCreateOptionsMenu(menu, inflater);
    }

我可以为 MenuItems 调用 getTitle(),它会返回正确的值。但由于某种原因 setEnabled()、setTitle()、setVisible() 等不起作用,值保持不变...

【问题讨论】:

    标签: android android-fragments navigation-drawer android-menu oncreateoptionsmenu


    【解决方案1】:

    要禁用片段中的菜单项,请使用片段:

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

    去掉Activity里面的onCreateOptionsMenu(),在一个fragment里面使用:

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

    【讨论】:

    【解决方案2】:
    Try This:
    
     @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        oldDescription= ActivityConstantUtils.sBlogDescriprtion;
        setHasOptionsMenu(true);
    }
    
    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        inflater.inflate(R.menu.menu_act_add_section, menu);
        MenuItem item = menu.findItem(R.id.action_preview);
        item.setIcon(null);
        item.setTitle("");
        super.onCreateOptionsMenu(menu, inflater);
    }
    

    【讨论】:

    • 通过使用它,您可以隐藏某些项目并从菜单中显示其他项目。
    • 在此处粘贴您的片段活动。
    【解决方案3】:

    我认为您正在尝试禁用 AppBar 上用于切换 NavigationDrawer 的主页按钮。

    我能想到的最好方法是:

    在方法 onOptionItemSelected:

    protected onOptionItemSelected(MenuItem item)
    {
       if(item.getItemId() == android.R.id.home)
        {
                // do anything you want here
        }
    }
    

    这将帮助您覆盖主页按钮。

    如果你想用默认箭头图标替换那个汉堡图标,你可以使用

    mNavigationDrawer.setDrawerIndicatorEnabled(false);
    

    此外,如果您还想禁用抽屉滑动功能, 你可以使用

    drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
    

    希望对您有所帮助。 :)

    【讨论】:

      【解决方案4】:

      天哪,我的坏...

      我想禁用的是 NavigationView 中的 MenuItems...

      NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
      navigationView.getMenu().findItem(R.id.nav_amount).setEnabled(false);
      

      感谢您的帮助:)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-08-20
        • 2013-03-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多