当我尝试从界面调用DAO
时出现问题。
这是我调用观察者方法的地方:
mCategories = ViewModelProviders.of(FragmentCategories.this).get(CategoriesViewModel.class);
//...
mCategories.getCategories(context).observe(this, listC -> {
ArrayList<Category> newList=new ArrayList<>(listC);
final DiffUtil.DiffResult result = DiffUtil.calculateDiff(
new CategoriesDif(list,newList), false);
list.clear();
list.addAll(newList);
result.dispatchUpdatesTo(myAdapter);
onItemsLoadComplete();
});
这是我向DB添加对象的时候:
private ColorPicked colorPicked = null;
//...
if (x) {
colorPicked = () - > {
Category c = new Category();
c.name = input.toString();
new AddCategoryOrLinkToDB().execute(c);
colorPicked = null;
dialog.dismiss();};
new ColorChooserDialog.Builder(MainActivity.this, R.string.color_palette)
.titleSub(R.string.colors)
.dynamicButtonColor(false)
.show(MainActivity.this);
} else {
Category c = new Category();
c.name = input.toString();
new AddCategoryOrLinkToDB().execute(c);
colorPicked = null;
dialog.dismiss();
}
//...
@Override
public void onColorChooserDismissed(@NonNull ColorChooserDialog dialog) {
if (colorPicked != null) {
colorPicked.chosen();
}
}
为什么,如果我打电话给
new AddCategoryOrLinkToDB().execute(c)
colorPicked
,观察者不会触发并停止工作?
答案 0 :(得分:0)
我发现了问题。
在ViewModel中,我使用方法observeForever
,将其替换为我解决的observe
。