当我尝试从界面调用DAO
时遇到问题。
这是我调用observer方法的地方:
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
,观察者不会触发并停止工作?
我发现了这个问题。
在ViewModel中,我使用了observeForever
方法,用我解决的observe
替换它。