我的操作栏中有一个项目菜单(排序列表),我必须将其可见性设置为VISIBLE / GONE(取决于列表大小 - >是否为空)。
所以我需要检查listview是否为空并相应地设置该菜单项的可见性,我设法得到了一些代码(检查onCreateOptionsMenu中的listview大小并设置菜单项可见性) ,但问题是列表可以从同一活动或另一个活动更改其内容,让我没有选项(IMO),而不是再次检查列表视图大小并在onResume()中设置visiblity。
下一个问题是:在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();
}
答案 0 :(得分:3)
如果您使用(google ActionBar compat lib)或类似的方法,您可以在onCreateOptionsMenu中动态添加排序MenuItem,具体取决于您的列表视图大小和onResume调用supportInvalidateOptionsMenu()。