我已经在片段中实现了Snackbar undo delete功能。它可以正常工作。但是现在我改变了menuoptions加载的方式。我的意思是我添加了一个条件,即在检查至少一项时,在项目列表中添加了删除图标。显示在menuitem中,否则不显示。Sample
@Override
public void onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
MenuItem item = menu.findItem(R.id.action_delete);
getActivity().invalidateOptionsMenu();
hideShowMenuItem();
if (mItems.size() == 0)
item.setVisible(false);
else {
item.setVisible(true);
}
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
getActivity().getMenuInflater().inflate(R.menu.checklist_menu, menu);
super.onCreateOptionsMenu(menu, inflater);
}
一切看起来不错,但是现在当我尝试撤消删除操作时,它不会加载列表视图。它什么也没做。
TravelmateSnackbars.createSnackBar(mChecklistView,
R.string.deleted_task_message,
Snackbar.LENGTH_LONG)
.setAction(R.string.undo, v -> {
for (int i = 0; i < mItems.size(); i++) {
//adds all completed task in database again
ChecklistItem checklistItem = new ChecklistItem(mItems.get(i).getName(), String.valueOf(1));
mDisposable.add(mViewModel.insertItem(checklistItem)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe());
Log.i("CheckListItem ", "checklistItem " + checklistItem.getName());
}
})
.setActionTextColor(getResources().getColor(R.color.colorPrimary))
.show();
}
我不确定单击undo时片段中的menuoptions中的添加条件是否会干扰视图。撤消删除后小吃栏如何重新加载项目的列表视图。谢谢您的帮助
答案 0 :(得分:0)
在删除/还原列表项之后(就像您在执行undo
操作一样),您应该致电invalidateOptionsMenu();
另一个问题是,至少在您发布的代码上,您没有将列表更改通知适配器,这就是为什么看不到它正确更新的原因。
恢复/添加项目后,应该在适配器上调用notifyDataSetChanged