我在我的操作栏中有一个项目菜单(排序列表),我必须将其可见性设置为可见/去(取决于列表大小 - >是否为空)。Android操作栏菜单项
所以我需要的是检查listview是否为空,并相应地设置该菜单项的可见性,我设法想出了一些代码来做到这一点(检查onCreateOptionsMenu中的listview大小并设置菜单项的可见性),但问题在于列表可以从同一活动或从另一个活动更改其内容,使我无法选择(IMO)而不是再次检查listview大小并在onResume()中设置可见性。
接下来的问题是:在onResume()中设置该项目的可见性,将会抛出一个NPE,因为我还没有初始化该MenuItem(在onResume之后调用onCreateOptionsMenu)。 任何想法如何解决这种情况,将不胜感激。
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
getSupportMenuInflater().inflate(R.menu.main, menu);
/*
* initialize sortMenuItem so it can be used for turning visibility
* on/off in onResume()
*/
sortMenuItem = menu.findItem(R.id.menu_sort);
return true;
}
@Override
public void onResume() {
super.onResume();
boolean isListEmpty = mInterviewsList.isEmpty();
Log.d(LOG_TAG, "sortMenuItem is null? " + (sortMenuItem == null));
// sortMenuItem is indeed null
sortMenuItem.setVisible(isListEmpty);
sortMenuItem.setEnabled(!isListEmpty);
this.invalidateOptionsMenu();
}
我认为无论您使用notifyDataSetChanged()更新listview的内容,您都可以设置菜单项的可见性。不是吗? –
我的问题是在实际修改listview之前获取sortMenuItem对象,因此它不会再抛出NPE。 – DoruAdryan