DrawerLayout очень запаздывает при закрытии после нажатия на элемент. Причиной Царства? - PullRequest
0 голосов
/ 06 июля 2018

Когда я нажимаю на элемент в моем 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...