Intereting Posts
Как установить maxLength в Anko В Vertx мне нужно перенаправить все HTTP-запросы на один и тот же URL-адрес, но для HTTPS Программирование создания пейджера представления в панели вкладок, но просмотр содержимого пейджера прокручивается через вкладки Захват ArgumentCaptor, возвращающий значение null Как переустановить уже запущенную службу поддержки музыкальных плееров Как я могу автоматически присвоить переменную переменной по типу в реальном шаблоне? Kotlin добавляет пользовательский прослушиватель для доступа к виджетам на Android RxJava2 наблюдаемый не обрабатывается вNext при изменении Kotlin и parallelStream toArray Проверка метода Спящий режим doAsync Котлин-андроид не работает Kotlin, получающий доступ к членам сопутствующих объектов в производных типах Kotlin: передать массив методу varargs с оператором распространения Котлинский эквивалент тернарного оператора Настройка Kotlin в новом проекте Android Studio

Реагировать на перестройку вызова

У меня есть приложение, которое имеет viewpager с 4 фрагментами. Я хочу заполнить все фрагменты данными с моего сервера. Я загружаю данные в действие, и я хочу распространять его на все фрагменты.

Итак, у меня есть эта подпись:

@GET("trashCan") fun getTrashCans() : Observable<List<TrashCanDto>> 

И я вызываю метод и заполняю List.

 ServiceGenerator.createService(ApiClient::class.java) .getTrashCans() .subscribeOn(Schedulers.newThread()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(object : Subscriber<List<TrashCan>>(){ override fun onCompleted() { showProgress(false) } override fun onError(e: Throwable) { showProgress(false) Toast.makeText(this@TrashCansInfoActivity, "Erro ao carregar informações", Toast.LENGTH_SHORT).show() e.printStackTrace() } override fun onNext(trashCanList: List<TrashCan>) { mTrashCanList = trashCanList } }) 

И тогда у меня есть способ получить Observable из этого списка:

 override fun getObservable(): Observable<TrashCan> { return BehaviorSubject.from(mTrashCanList) } 

И я получаю тогда в своих фрагментах:

 fun newInstance(sectionNumber: Int, hasObservable: HasObservable<TrashCan>) : TrashCansInfoFragment { val fragment = TrashCansInfoFragment() fragment.setObservable(hasObservable.getObservable()) val args = Bundle() args.putInt(ARG_SECTION_NUMBER, sectionNumber) fragment.arguments = args return fragment } 

Ну … это должно сработать, но это не так. Бывает, что первый из моих фрагментов пуст, а у четвертых – данные. (у вторых и третьих не должно быть никаких данных … и они этого не делают)

Поэтому я думаю: когда фрагмент создается, список по-прежнему пуст, поэтому Observable в активности ничего не дает … Но когда пейджер представления получает в четвертом фрагменте, List больше не равен null, поэтому мой экран показывает данные.

Моя проблема: как заставить Observable в активности продолжать толкать данные во фрагменты? Прямо сейчас, это только толкает данные, когда Observable подзагоняется … Я хочу изменить это, поэтому он толкает, когда появляются новые данные.

(Я думаю, что первый Observable должен общаться непосредственно с Субъектом, бит, я не уверен, как это сделать …)

Любая помощь приветствуется!

Solutions Collecting From Web of "Реагировать на перестройку вызова"

Ваша проблема в том, что эта операция просто принимает текущее значение списка и не реагирует на обновления (зачем это нужно?):

 BehaviorSubject.from(mTrashCanList) 

В качестве одного из вариантов в вашей деятельности вы можете подписаться на свой BehaviorSubject в Observable :

 ServiceGenerator.createService(ApiClient::class.java) .getTrashCans() .subscribeOn(Schedulers.newThread()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(yourSubject) 

И затем верните его вместо своего Тема:

 override fun getObservable(): Observable<TrashCan> { return yourSubject.asObservable() }