Когда я нажимаю на элемент в моем NavigationView, я вызываю getSupportFM и загружаю фрагмент. Во фрагмент я присоединяю ViewModel и в конструктор, а затем загружаю свои данные из сети и в это время в методе .doOnNext
сохраняю их в базе данных Realm.
public MyViewModel() {
repository = new MyRepository();
realm = Realm.getDefaultInstance();
liveData = new LiveRealmResults<>(realm.where(MyClass.class).findAllAsync());
}
Мой сетевой запрос:
apiInterface.getMyData(page)
.subscribeOn(Schedulers.io())
.doOnNext(myDataRequest -> {
if (myDataRequest.getMyData().size() != 0) {
List<MyData> myData= myDataRequest.getMyData();
try (Realm realm = Realm.getDefaultInstance()) {
realm.executeTransaction(r -> r.insertOrUpdate(myData));
}
}
})
.observeOn(AndroidSchedulers.mainThread())
Мой фрагмент:
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//we should to do this.
//https://developer.android.com/jetpack/arch/livedata#the_advantages_of_using_livedata
viewModel = ViewModelProviders.of(getActivity()).get(MyViewModel.class);
viewModel.getMyLiveData().observe(this, stateObserver);
}
И наблюдатель:
private Observer<List<MyData>> stateObserver = new Observer<List<MyData>>() {
@Override
public void onChanged(@Nullable List<MyData> myData) {
if (myData.size() != 0) {
progressBar.setVisibility(View.GONE);
adapter.updateAdapter(myData);
}
}
};
Но, если я удаляю эту строку, DrawerLayout не запаздывает, когда я переключаюсь между фрагментами с навигацией. В первый раз я загружаю 20 элементов из сети.
Я потратил два дня, чтобы это исправить, но я не понимаю, как это сделать.
viewModel.getMyLiveData().observe(this, stateObserver);