問:
哪個運營商或變換我應該用兩個數據流中的代碼量最小,並以最有效的方式結合起來?RxJava - 兩個可觀察人士透露,僅在特定的值
ViewPager,RxBinding,事件流
使用Android ViewPager,我觀察的事件(使用RxBinding)
1)使用onPageSelected(本頁目前可見)
Observable<Integer> pageSelectObs = RxViewPager.pageSelections(mPlaceImageViewPager);
和
2)OnPageScrollStateChanged(掃描開始= 1,運動= 2,完成= 0)
Observable<Integer> scrollStateObs = RxViewPager.pageScrollStateChanges(mPlaceImageViewPager);
整數流是這樣的:
I/System.out: Page: 0 ScrollState: 1
I/System.out: Page: 0 ScrollState: 2
I/System.out: Page: 1 ScrollState: 2
I/System.out: Page: 1 ScrollState: 0
I/System.out: Page: 1 ScrollState: 1
I/System.out: Page: 1 ScrollState: 2
I/System.out: Page: 2 ScrollState: 2
I/System.out: Page: 2 ScrollState: 0
我只會在感興趣的:達到
- ScrollState == ViewPager 0
- 結束
當前編號
這是我當前如何觀察:
Disposable d = ObservableCombineLatest.combineLatest(pageSelectObs, scrollStateObs, new BiFunction<Integer, Integer, Integer>() { @Override public Integer apply(@NonNull Integer pageSelected, @NonNull Integer scrollState) throws Exception { AUtils.logSystem(TAG, "Page: %s ScrollState: %s", pageSelected, scrollState); if (adapter.isLastVisibleItem(pageSelected) && adapter.hasHiddenItemsRight() && scrollState == 0) { return 1; } if (adapter.isFirstVisibleItem(pageSelected) && adapter.hasHiddenItemsLeft() && scrollState == 0) { return -1; } return 0; } }).subscribe(new Consumer<Integer>() { @Override public void accept(@NonNull Integer doAction) throws Exception { if (doAction == -1) { AUtils.logSystem(TAG, "shift LEFT"); adapter.shiftLeft(); } if (doAction == 1) { AUtils.logSystem(TAG, "shift RIGHT"); adapter.shiftRight(); } } });
有沒有這樣做上面的一個簡單的方法?
爲什麼你檢查:adapter.isLastVisibleItem(pageSelected)&& adapter.hasHiddenItemsRight()? –
我根據頁面更改數據集。 – Baker