Slide 1

Slide 1 text

ϖʔδϯάͷ ঢ়ଶ؅ཧ͔Β։์͞Ε͍ͨ potatotips #33 yuyakaido

Slide 2

Slide 2 text

ࣗݾ঺հ • ւ౻༏໻ʢ͔͍Ͳ͏Ώ͏΍ʣ • גࣜձࣾΤ΢ϨΧ • ໿1೥ͷΠϯλʔϯΛܦͯɺ2015೥4݄ʹ৽ଔೖࣾ • ςετ͓͡͞Μ yuyakaido yuyakaido

Slide 3

Slide 3 text

ϖʔδϯάͱ͸ʁ • ௥ՃಡΈࠐΈ • Ϧετͷ࠷Լ෦ʹ౸ୡͨ͠ΒDB΍API͔Β࣍ ϖʔδͷσʔλΛಡΈࠐΜͰදࣔ͢Δ

Slide 4

Slide 4 text

ࠓճͷγφϦΦ • RecyclerView • ࠷Լ෦·Ͱ౸ୡͨ͠ΒAPI͔ΒσʔλΛऔಘ • औಘͨ͠σʔλΛ࠷Լ෦ʹ௥Ճ

Slide 5

Slide 5 text

࣮૷ͯ͠ΈΔ • εΫϩʔϧΛίʔϧόοΫͰड͚औΔ • RecyclerView#OnScrollListener • AbsListView#OnScrollListener • ࠷Լ෦·Ͱ౸ୡͨ͠ΒAPIΛୟ͘

Slide 6

Slide 6 text

εΫϩʔϧΠϕϯτ recyclerView.scrollEvents() .filter { RecyclerViewUtil.shouldPaginate(layoutManager) }
 .subscribe({
 // Load next page
 }) fun shouldPaginate(manager: LinearLayoutManager): Boolean {
 val totalItemCount = manager.itemCount - 1
 val lastVisibleItemPosition = manager.findLastVisibleItemPosition()
 return totalItemCount == lastVisibleItemPosition
 } εΫϩʔϧͷݕ஌ ࠷Լ෦ͷ൑ఆ

Slide 7

Slide 7 text

QA͞Μͱͷ΍ΓऔΓ ΞΠςϜ͕ॏෳͯ͠දࣔ͞Ε·͢Ͷ ͦΜͳΘ͚ͳ͍΍Ζ ɾɾɾ ΄Μ·΍

Slide 8

Slide 8 text

Կނͳͷ͔ • ίʔϧόοΫ͕Կ౓΋ݺ͹Ε͍ͯΔ • Demo

Slide 9

Slide 9 text

Slide 10

Slide 10 text

ରॲํ๏ • ಡΈࠐΈதϑϥάΛ࣋ͭ • ϑϥάΛͲ͜ʹ͔࣋ͭ • Activity/FragmentͷϑΟʔϧυ • ؅ཧ͢Δঢ়ଶ͕૿͑Δͷ͸ΠϠ • ΫϩʔδϟΛ࢖͏ͱ͍͍ײ͡ʹ؅ཧͰ͖ΔͷͰ͸

Slide 11

Slide 11 text

ΫϩʔδϟͰͷঢ়ଶ؅ཧ fun getFetcher(category: Category): () -> Observable> {
 var isFetching = false
 var offset = 0
 return fun () = Observable.just(isFetching)
 .filter { !isFetching }
 .doOnNext { isFetching = true }
 .flatMap { repository.getArticles(category, offset) }
 .doOnNext { isFetching = false }
 .doOnNext { offset += it.size }
 } • ಡΈࠐΈதϑϥάͱΦϑηοτΛ؅ཧ • ಡΈࠐΈதʹୟ͍ͯ΋Կ΋ى͜Βͳ͍ • Activity/Fragment͔ΒΈΔͱɺԿ΋ߟ͑ͣʹୟ͚͹OK

Slide 12

Slide 12 text

·ͱΊ • ϖʔδϯάͰ͸ಡΈࠐΈঢ়ଶΛ؅ཧ͢Δඞཁ͋Γ • ঢ়ଶΛΫϥεͷϑΟʔϧυͰ؅ཧͨ͘͠ͳ͍ • KotlinΛ࢖͍ͬͯΔ৔߹ΫϩʔδϟΛɺJavaͷ৔ ߹͸ແ໊ΫϥεΛ࢖͏ͱ޾ͤʹͳΕΔ͔΋ • https://github.com/yuyakaido/Flow-Android

Slide 13

Slide 13 text

Thank you :) Credit: NASA Earth Observatory/NOAA NGDC