我有一個SearchView,它執行網絡請求來搜索一些曲目,然後用結果填充RecylerView。我發現這個代碼工作正常。使用RxJava更新RecyclerView上的UI(加載和錯誤視圖)
我已經通過適配器集成了RecyclerView EmptyView,但現在我正試圖在此代碼中集成LoadingView(Progress)和ErrorView。我試着在ConcatMap裏面將可見性爲True的LoadingView(ProgressBar)放在concatMap中,但得到了錯誤:「只有創建視圖層次結構的原始線程可以觸及其視圖。」可以在MainThread上運行它,但我確信有一個更好的方法來做到這一點。
有人可以更好地瞭解在何處以及如何將顯示/隱藏ErrorView和LoadingView的邏輯集成到此代碼中?
我也在使用RxBinding。也許也使用RxRecyclerView將是一個好主意?
RxSearchView.queryTextChanges(searchView).
filter(charSequence ->
!TextUtils.isEmpty(charSequence))
.throttleLast(100, TimeUnit.DAYS.MILLISECONDS)
.debounce(200, TimeUnit.MILLISECONDS)
.onBackpressureLatest()
.concatMap(searchTerm ->
{
return searchTracks(searchTerm).
.subscribeOn(Schedulers.io())
.onErrorResumeNext(throwable1 -> {
//handle error somehow, change UI
return Observable.empty();
}
);
}
)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(tracks -> {
populateTracks(tracks);
}
});
}, throwable -> {
//show errorView
});
你有機會獲得活動會在這裏?如果是這樣,['activity.runOnUiThread(..)'](http://developer.android.com/reference/android/app/Activity.html#runOnUiThread%28java.lang.Runnable%29)是你的朋友 –