我试图在我的应用程序中发生某些事情时启用/禁用刷新按钮,但是我得到一个我无法弄清楚的空指针异常。我根据情况将布尔值addingRefresh
或removingRefresh
设置为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);
}
感谢您的帮助!
答案 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