Android Snackbar撤消删除操作不会重新加载listview

时间:2018-08-14 13:14:24

标签: android reactive

我已经在片段中实现了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中的添加条件是否会干扰视图。撤消删除后小吃栏如何重新加载项目的列表视图。谢谢您的帮助

1 个答案:

答案 0 :(得分:0)

在删除/还原列表项之后(就像您在执行undo操作一样),您应该致电invalidateOptionsMenu();

另一个问题是,至少在您发布的代码上,您没有将列表更改通知适配器,这就是为什么看不到它正确更新的原因。 恢复/添加项目后,应该在适配器上调用notifyDataSetChanged