为什么从接口调用Dao会破坏ViewModel上的观察?

问题描述 投票:0回答:1

当我尝试从界面调用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,观察者不会触发并停止工作?

android viewmodel dao android-room android-livedata
1个回答
0
投票

我发现了这个问题。

在ViewModel中,我使用了observeForever方法,用我解决的observe替换它。

© www.soinside.com 2019 - 2024. All rights reserved.