Observable.from(listOf("moo", "cluck", “quack"))
time
moo cluck
D/Animal Sound: moo
D/Animal Sound: cluck
E/Error Event: Error in Animal Sounds example
at com.rxapplications.example.ExampleClass…
X
Slide 62
Slide 62 text
Non-RxViews
Slide 63
Slide 63 text
Pull to Refresh
Slide 64
Slide 64 text
class ItemListView : FrameLayout, IItemListView {
@Inject
private val model: ItemListViewModel
private val refreshView by bindView(R.id.swipe_view)
private val adapter = ItemListViewAdapter(context)
override fun onFinishInflate() {
super.onFinishInflate()
refreshView.setOnRefreshListener(listener)
}
override fun onAttachedToWindow() {
super.onAttachedToWindow()
model.attach(this)
}
override fun onDetachedFromWindow() {
model.detach(this)
super.onDetachedFromWindow()
}
private val listener = object : SwipeRefreshLayout.OnRefreshListener {
override fun onRefresh() {
model.requestRefresh()
}
}
}
Slide 65
Slide 65 text
class ItemListView : FrameLayout, IItemListView {
@Inject
private val model: ItemListViewModel
private val refreshView by bindView(R.id.swipe_view)
private val adapter = ItemListViewAdapter(context)
override fun onFinishInflate() {
super.onFinishInflate()
refreshView.setOnRefreshListener(listener)
}
override fun onAttachedToWindow() {
super.onAttachedToWindow()
model.attach(this)
}
override fun onDetachedFromWindow() {
model.detach(this)
super.onDetachedFromWindow()
}
private val listener = object : SwipeRefreshLayout.OnRefreshListener {
override fun onRefresh() {
model.requestRefresh()
}
}
}
Slide 66
Slide 66 text
class ItemListView : FrameLayout, IItemListView {
@Inject
private val model: ItemListViewModel
private val refreshView by bindView(R.id.swipe_view)
private val adapter = ItemListViewAdapter(context)
override fun onFinishInflate() {
super.onFinishInflate()
refreshView.setOnRefreshListener(listener)
}
override fun onAttachedToWindow() {
super.onAttachedToWindow()
model.attach(this)
}
override fun onDetachedFromWindow() {
model.detach(this)
super.onDetachedFromWindow()
}
private val listener = object : SwipeRefreshLayout.OnRefreshListener {
override fun onRefresh() {
model.requestRefresh()
}
}
}
Slide 67
Slide 67 text
class ItemListView : FrameLayout, IItemListView {
@Inject
private val model: ItemListViewModel
private val refreshView by bindView(R.id.swipe_view)
private val adapter = ItemListViewAdapter(context)
override fun onFinishInflate() {
super.onFinishInflate()
refreshView.setOnRefreshListener(listener)
}
override fun onAttachedToWindow() {
super.onAttachedToWindow()
model.attach(this)
}
override fun onDetachedFromWindow() {
model.detach(this)
super.onDetachedFromWindow()
}
private val listener = object : SwipeRefreshLayout.OnRefreshListener {
override fun onRefresh() {
model.requestRefresh()
}
}
}
Slide 68
Slide 68 text
class ItemListView : FrameLayout, IItemListView {
// Set up
override fun onFinishInflate() {
super.onFinishInflate()
refreshView.setOnRefreshListener(listener)
}
override fun onAttachedToWindow() {
super.onAttachedToWindow()
model.attach(this)
}
override fun onDetachedFromWindow() {
model.detach(this)
super.onDetachedFromWindow()
}
}
Slide 69
Slide 69 text
class ItemListView : FrameLayout, IItemListView {
// Set up
override fun onFinishInflate() {
super.onFinishInflate()
refreshView.setOnRefreshListener(listener)
}
override fun onAttachedToWindow() {
super.onAttachedToWindow()
model.attach(this)
}
override fun onDetachedFromWindow() {
model.detach(this)
super.onDetachedFromWindow()
}
}
Slide 70
Slide 70 text
class ItemListView : FrameLayout, IItemListView {
// Set up
override fun onFinishInflate() {
super.onFinishInflate()
refreshView.setOnRefreshListener(listener)
}
override fun onAttachedToWindow() {
super.onAttachedToWindow()
model.attach(this)
}
override fun onDetachedFromWindow() {
model.detach(this)
super.onDetachedFromWindow()
}
}
Slide 71
Slide 71 text
interface IItemListView {
fun onItemsResponse(items: List)
fun onItemsError(error: Throwable)
fun onRefreshComplete()
}
Slide 72
Slide 72 text
interface IItemListView {
fun onItemsResponse(items: List)
fun onItemsError(error: Throwable)
fun onRefreshComplete()
}
Slide 73
Slide 73 text
interface IItemListView {
fun onItemsResponse(items: List)
fun onItemsError(error: Throwable)
fun onRefreshComplete()
}
Slide 74
Slide 74 text
class ItemListView : FrameLayout, IItemListView {
// Set up
override fun onFinishInflate() {
super.onFinishInflate()
refreshView.setOnRefreshListener(listener)
}
override fun onAttachedToWindow() {
super.onAttachedToWindow()
model.attach(this)
}
override fun onDetachedFromWindow() {
model.detach(this)
super.onDetachedFromWindow()
}
private val listener = object : OnRefreshListener {
override fun onRefresh() {
model.requestRefresh()
}
}
}
Slide 75
Slide 75 text
class ItemListView : FrameLayout, IItemListView {
// Set up
override fun onFinishInflate() {
super.onFinishInflate()
refreshView.setOnRefreshListener(listener)
}
override fun onAttachedToWindow() {
super.onAttachedToWindow()
model.attach(this)
}
override fun onDetachedFromWindow() {
model.detach(this)
super.onDetachedFromWindow()
}
private val listener = object : OnRefreshListener {
override fun onRefresh() {
model.requestRefresh()
}
}
}
Slide 76
Slide 76 text
class ItemListView : FrameLayout, IItemListView {
private val listener = object : OnRefreshListener {
override fun onRefresh() {
model.requestRefresh()
}
}
override fun onItemsResponse(items: List) {
adapter.setItems(items)
}
override fun onItemsError(error: Throwable) {
log.e(error, "Error in ItemListView")
}
override fun onRefreshComplete() {
refreshView.setRefreshing(false)
}
}
Slide 77
Slide 77 text
class ItemListView : FrameLayout, IItemListView {
private val listener = object : OnRefreshListener {
override fun onRefresh() {
model.requestRefresh()
}
}
override fun onItemsResponse(items: List) {
adapter.setItems(items)
}
override fun onItemsError(error: Throwable) {
log.e(error, "Error in ItemListView")
}
override fun onRefreshComplete() {
refreshView.setRefreshing(false)
}
}
Slide 78
Slide 78 text
class ItemListView : FrameLayout, IItemListView {
private val listener = object : OnRefreshListener {
override fun onRefresh() {
model.requestRefresh()
}
}
override fun onItemsResponse(items: List) {
adapter.setItems(items)
}
override fun onItemsError(error: Throwable) {
log.e(error, "Error in ItemListView")
}
override fun onRefreshComplete() {
refreshView.setRefreshing(false)
}
}
Slide 79
Slide 79 text
class ItemListView : FrameLayout, IItemListView {
private val listener = object : OnRefreshListener {
override fun onRefresh() {
model.requestRefresh()
}
}
override fun onItemsResponse(items: List) {
adapter.setItems(items)
}
override fun onItemsError(error: Throwable) {
log.e(error, "Error in ItemListView")
}
override fun onRefreshComplete() {
refreshView.setRefreshing(false)
}
}
Slide 80
Slide 80 text
interface IItemListView {
fun onItemsResponse(items: List)
fun onItemsError(error: Throwable)
fun onRefreshComplete()
}
Slide 81
Slide 81 text
interface IItemListView {
fun onItemsResponse(items: List)
fun onItemsError(error: Throwable)
fun onRefreshComplete()
fun onNextResponsePage(items: List)
fun onNextResponsePageError(error: Throwable)
fun onNextResponsePageComplete()
}
Slide 82
Slide 82 text
RxViews
Slide 83
Slide 83 text
Pull to Refresh
Slide 84
Slide 84 text
class ItemListView : FrameLayout {
@Inject
private val model: ItemListViewModel
private val subscriptions = CompositeSubscription()
private val refreshView by bindView(R.id.swipe)
private val adapter = ItemListViewAdapter(context)
}
Slide 85
Slide 85 text
class ItemListView : FrameLayout {
@Inject
private val model: ItemListViewModel
private val subscriptions = CompositeSubscription()
private val refreshView by bindView(R.id.swipe)
private val adapter = ItemListViewAdapter(context)
}
Slide 86
Slide 86 text
class ItemListView : FrameLayout {
override fun onAttachedToWindow() {
super.onAttachedToWindow()
subscriptions.add(
swipeRefreshLayout.refreshes()
.subscribe(refreshObserver)
)
model.observeResponse()
.observeOn(AndroidSchedulers.mainThread())
.subscribe(responseObserver)
}
}
Slide 87
Slide 87 text
RxBinding
Slide 88
Slide 88 text
final class SwipeRefreshLayoutRefreshObservable
extends Observable {
private final SwipeRefreshLayout view;
SwipeRefreshLayoutRefreshObservable(SwipeRefreshLayout view) {
this.view = view;
}
@Override
protected void subscribeActual(
Observer observer) {
if (!checkMainThread(observer)) {
return;
}
Listener listener = new Listener(view, observer);
observer.onSubscribe(listener);
view.setOnRefreshListener(listener);
}
Slide 89
Slide 89 text
final class SwipeRefreshLayoutRefreshObservable
extends Observable {
private final SwipeRefreshLayout view;
SwipeRefreshLayoutRefreshObservable(SwipeRefreshLayout view) {
this.view = view;
}
@Override
protected void subscribeActual(
Observer observer) {
if (!checkMainThread(observer)) {
return;
}
Listener listener = new Listener(view, observer);
observer.onSubscribe(listener);
view.setOnRefreshListener(listener);
}
Slide 90
Slide 90 text
final class SwipeRefreshLayoutRefreshObservable
extends Observable {
private final SwipeRefreshLayout view;
SwipeRefreshLayoutRefreshObservable(SwipeRefreshLayout view) {
this.view = view;
}
@Override
protected void subscribeActual(
Observer observer) {
if (!checkMainThread(observer)) {
return;
}
Listener listener = new Listener(view, observer);
observer.onSubscribe(listener);
view.setOnRefreshListener(listener);
}
Slide 91
Slide 91 text
final class SwipeRefreshLayoutRefreshObservable
extends Observable {
private final SwipeRefreshLayout view;
SwipeRefreshLayoutRefreshObservable(SwipeRefreshLayout view) {
this.view = view;
}
@Override
protected void subscribeActual(
Observer observer) {
if (!checkMainThread(observer)) {
return;
}
Listener listener = new Listener(view, observer);
observer.onSubscribe(listener);
view.setOnRefreshListener(listener);
}
Slide 92
Slide 92 text
static final class Listener
extends MainThreadDisposable implements OnRefreshListener {
private final SwipeRefreshLayout view;
private final Observer observer;
@Override public void onRefresh() {
if (!isDisposed()) {
observer.onNext(Notification.INSTANCE);
}
}
@Override protected void onDispose() {
view.setOnRefreshListener(null);
}
}
Slide 93
Slide 93 text
static final class Listener
extends MainThreadDisposable implements OnRefreshListener {
private final SwipeRefreshLayout view;
private final Observer observer;
@Override public void onRefresh() {
if (!isDisposed()) {
observer.onNext(Notification.INSTANCE);
}
}
@Override protected void onDispose() {
view.setOnRefreshListener(null);
}
}
Slide 94
Slide 94 text
static final class Listener
extends MainThreadDisposable implements OnRefreshListener {
private final SwipeRefreshLayout view;
private final Observer observer;
@Override public void onRefresh() {
if (!isDisposed()) {
observer.onNext(Notification.INSTANCE);
}
}
@Override protected void onDispose() {
view.setOnRefreshListener(null);
}
}