java我想在ListView中没有项目时删除选项菜单(显示emptyView)?
我有一个将项目添加到sqlite数据库并返回光标的应用程序,然后将该光标与名为StoreCursorAdapter的自定义CursorAdapter一起使用,以在列表视图中显示项目
选项菜单项中有一个(全部删除)按钮
当列表视图中没有可用的项目时,我想隐藏此选项菜单项
抱歉,我是新用户,所以他们还不允许我嵌入图片-(
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_inventory);
//Declare the views
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
ListView list = (ListView) findViewById(R.id.list);
emptyView = findViewById(R.id.empty_view);
//Set the screen to be shown when there are no list items
list.setEmptyView(emptyView);
//StoreCursorAdapter is a custom CursorAdapter
mAdapter = new StoreCursorAdapter(this, null);
list.setAdapter(mAdapter);
}
@Override
protected void onStart() {
super.onStart();
invalidateOptionsMenu();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu options from the res/menu/menu_inventory.xml file.
// This adds menu items to the app bar.
getMenuInflater().inflate(R.menu.menu_inventory, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// User clicked on a menu option in the app bar overflow menu
showDeleteConfirmationDialog();
return super.onOptionsItemSelected(item);
}
我试过了
1-空视图。Visibility()=视图。隐形的
2.列表。getAdapter==null
但它们没有起作用
什么样的声明才能完成任务
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
if (//what statement) {
MenuItem menuItem = menu.findItem(R.id.action_delete_all);
menuItem.setVisible(false);
}
return true;
}
注:
OnStart()在我从EditorActivity返回后被调用
注:
在我的应用程序中,我可以从另一个活动中删除单个项目,以便添加InvalidateOptions功能表();在OnOptions中,ItemSelected不会执行此任务
# 1 楼答案
如果你没有任何菜单项可以显示,为什么你要给它充气,如果你不充气,你就不会
除非您需要根据活动的当前状态动态删除菜单选项,否则这可能会有帮助How do you remove an inflated menu/items from the new Lollipop Toolbar?
# 2 楼答案
放入
onPrepareOptionsMenu
的正确条件是:这与ListView管理空视图时使用的比较相同(减去空检查)(https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/java/android/widget/AdapterView.java#747)
但我相信这里还有另一个问题,那就是数据在活动开始后,在
showDeleteConfirmationDialog()
期间发生了变化。这意味着您必须在数据更改时调用invalidateOptionsMenu()
。有两种方法。一个更健壮,另一个编写代码更快:在执行DB操作的代码后面添加
invalidateOptionsMenu()
您将使用开始/停止回调来监听数据中的更改。如下所示:
上面所有的代码都是用心输入的,可能会有打字错误,但这就是你以后可以在代码中修复的想法和错误