Skip to content

Instantly share code, notes, and snippets.

@thomasnield
Created September 14, 2018 15:30
Show Gist options
  • Select an option

  • Save thomasnield/a9c20d4d2d104ef5ab6b7313b213eb90 to your computer and use it in GitHub Desktop.

Select an option

Save thomasnield/a9c20d4d2d104ef5ab6b7313b213eb90 to your computer and use it in GitHub Desktop.
RxJava Refreshable
import io.reactivex.Observable
import io.reactivex.Single
import io.reactivex.subjects.BehaviorSubject
class RefreshTrigger {
private val _refreshEvents = BehaviorSubject.createDefault(Unit).toSerialized()
val refreshEvents: Observable<Unit> = _refreshEvents
fun refresh() = _refreshEvents.onNext(Unit)
}
/**
* Implementing Refreshable on companion objects provides access to refresh functions and a `RefreshTrigger`,
*/
abstract class Refreshable {
val refreshTrigger = RefreshTrigger()
val refreshEvents: Observable<Unit> = refreshTrigger.refreshEvents
fun refresh() = refreshTrigger.refresh()
}
fun <T> Single<T>.toRefreshable(triggerSource: RefreshTrigger) = triggerSource.refreshEvents.toRefreshable { this }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment