【问题标题】:Get MenuItem in lower Android versions在较低的 Android 版本中获取 MenuItem
【发布时间】:2013-08-28 09:17:08
【问题描述】:

我想在较低的 Android 版本中获取 MenuItem。此代码在 Android 4.0.3 中运行良好:

_menu.findItem(R.id.menu_item).setVisible(true);

但该应用在 Android 2.3.6 中崩溃。它会抛出 NullPointerException。

如何让它在较低的 Android 版本中运行?

【问题讨论】:

    标签: android exception menu nullpointerexception menuitem


    【解决方案1】:

    我的代码的 minSdkVersion 为 8,没有问题

    对于片段:

    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    
    super.onCreateOptionsMenu(menu, inflater);
    
            inflater.inflate(R.menu.menu_result_search, menu);
    
            MenuItem saveItem = menu.findItem(R.id.save_item);      
            saveItem.setVisible(false);
    
    }
    

    对于活动:

    @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            super.onCreateOptionsMenu(menu);
            MenuInflater inflater = getSupportMenuInflater();
            inflater.inflate(R.menu.menu_detail, menu);
    
            MenuItem upIconActionBar = menu.findItem(R.id.menu_up);
            upIconActionBar.setVisible(false);
        }
    

    【讨论】:

    • 我将菜单对象保存为变量。它应该在 onCreateOptionsMenu 之外。
    • 我在 2.3.3 android 手机上的 onCreateOptionsMenu 之外进行了测试,它工作正常,没有崩溃 MenuItem save = mMenu.findItem(R.id.save_item); save.setVisible(false);
    • 来自 Android 开发者文档:如果您为 Android 2.3.x 及更低版本开发了应用程序,系统会在用户第一次打开菜单时调用 onCreateOptionsMenu() 来创建选项菜单.如果您是为 Android 3.0 及更高版本开发的,系统会在启动 Activity 时调用 onCreateOptionsMenu(),以便将项目显示到操作栏。在第一次打开之前,请确保您没有尝试访问 2.3.3 上的菜单!
    • 我正在使用 onPrepareOptionsMenu( Menu menu ) 来更新 UI。我可以通过调用 ActivityCompat.invalidateOptionsMenu(this); 来调用这个方法;它工作正常,似乎是最好的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-12
    • 2019-12-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多