LiveData не наблюдает изменений, произошедших в другом экземпляре модели представления? - PullRequest
0 голосов
/ 26 декабря 2018

У меня есть AndroidViewModel, используемый в двух fragments и содержит объект LiveData, подобный следующему

public class CartViewModel<v extends CartCallback> extends BaseViewViewModel<v> {

    private RoomDb roomDb;
    private BaseApi api;
    private AppExecutors executors;
    private PrefsManger prefsManger;

    private LiveData<List<LineEntity>> lines;
    private LiveData<List<ImageEntity>> images;
    private MutableLiveData<CartInfo> cartInfo;

    private LiveData<Long> linesCount;


    public CartViewModel(Application application, RoomDb roomDb, BaseApi api, AppExecutors executors, PrefsManger prefsManger) {
        super(application);
        this.roomDb = roomDb;
        this.api = api;
        this.executors = executors;
        this.prefsManger = prefsManger;

        lines = roomDb.lineDao().getAllLines();
    }


    public LiveData<List<LineEntity>> getLines() {
        return lines;
    }

    public void saveOfflineLine(LineEntity entity) {
        executors.diskIO().execute(() -> roomDb.lineDao().save(entity));
    }
}

, и на обоих фрагментах я запускаю модель представления, подобную этой

CartViewModel cartViewModel = ViewModelProviders.of(this, cartFactory).get(CartViewModel.class);
    cartViewModel.attachView(this);

когда я наблюдаю по строкам liveData из одного фрагмента и пользователь saveOfflineLine(entity) из другого по onChange не запускает, но если наблюдает и сохраняет из того же фрагмента (означает тот же экземпляр из модели представления) onChange успешно запускает

1 Ответ

0 голосов
/ 26 декабря 2018

Передайте getActivity() вместо this, как показано ниже, чтобы модель представления была общей для всех фрагментов

CartViewModel cartViewModel = ViewModelProviders.of(getActivity(),cartFactory).get(CartViewModel.class);
...