我的操作栏中有一个项目菜单(排序列表),我必须将其可见性设置为 VISIBLE/GONE(取决于列表大小 -> 是否为空)。
所以我需要检查 listview 是否为空并相应地设置该菜单项的可见性,我设法想出了一些代码来做到这一点(检查 onCreateOptionsMenu 中的 listview 大小并设置菜单项可见性) ,但问题是列表可以从同一个 Activity 或另一个 Activity 更改其内容,让我别无选择(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();
}
最佳答案
您可以根据您的 ListView 大小和 onResume 调用在 onCreateOptionsMenu 中动态添加排序 MenuItem supportInvalidateOptionsMenu()如果您使用(google ActionBar compat lib)或类似的方法。
关于Android 操作栏菜单项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18441234/