menu.findItem(R.id。*)为null- Android

时间:2014-09-18 01:47:38

标签: android menuitem

我试图在我的应用程序中发生某些事情时启用/禁用刷新按钮,但是我得到一个我无法弄清楚的空指针异常。我根据情况将布尔值addingRefreshremovingRefresh设置为true,然后调用invalidateOptionsMenu()启用或禁用按钮,但菜单项返回null。我在互联网上搜索了为什么会这样但却找不到任何东西。

onCreateOptionsMenu()的代码(调用invalidateOptionsMenu()时调用)

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    if (addingRefresh) {
        //below line as well as other similar line cause exceptions
        menu.findItem(R.id.action_refresh).setEnabled(true);
        addingRefresh = false;
    } else if (removingRefresh) {
        menu.findItem(R.id.action_refresh).setEnabled(false);
        removingRefresh = false;
    } else if (addingLoading) {

    }
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.main_activity_actions, menu);
    return super.onCreateOptionsMenu(menu);
}

感谢您的帮助!

3 个答案:

答案 0 :(得分:6)

以下是您要完成的一些清理代码:

private MenuItem mMenuItem;

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    final MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.main_activity_actions, menu);
    mMenuItem = menu.findItem(R.id.action_refresh)
    return true;
}

private void setMenuItemEnabled(boolean enabled) {
    mMenuItem.setEnabled(enabled);
}

希望有所帮助!

答案 1 :(得分:4)

只是为了清除疑点。 你应该使用

menu.findItem(R.id.menuId);
在充气菜单后

答案 2 :(得分:0)

对我来说,问题原因是错误的导入: android.widget.SearchView

代替 androidx.appcompat.widget.SearchView

并注意名称空间 app:actionViewClass