Slide 1

Slide 1 text

Paging Library ʹ͓͚ΔΞΫγϣϯΛ ϑοΫʹͨ͠Ϧετߋ৽ 2018/11/14 Matching Dev Meetup: iOS / Android Paging Library ʹ͓͚ΔΞΫγϣϯΛϑοΫʹͨ͠Ϧετߋ৽ 1

Slide 2

Slide 2 text

Who? — Ryo Nitami — Android Application Engineer @ playmotion, Inc. — Twitter: bird_tummy — GitHub: rnitame Paging Library ʹ͓͚ΔΞΫγϣϯΛϑοΫʹͨ͠Ϧετߋ৽ 2

Slide 3

Slide 3 text

Ϋϩεϛʔ — "͢Εҧ͍Λ࿀ͷ͖͔͚ͬʹ" — Ґஔ৘ใΛ࢖ͬͨϚονϯάαʔϏε — 10/30 ʹ Android ΞϓϦΛϑϧϦχϡʔΞϧ͠·ͨ͠ʂ — Architecture Components ΋Γ΋Γ + Kotlin 100% — ͜Ε͔ΒΞοϓσʔτ͕Μ͹Γ·͢ Paging Library ʹ͓͚ΔΞΫγϣϯΛϑοΫʹͨ͠Ϧετߋ৽ 3

Slide 4

Slide 4 text

Paging Library — 2017 ೥ͷ I/O Ͱൃද͞ΕͨɺϖʔδϯάʹಛԽͨ͠ϥΠϒ ϥϦ — "The Paging Library makes it easier for you to load data gradually and gracefully within your app's RecyclerView." — 2018/11/14 ݱࡏɺ2.1.0-beta01 Paging Library ʹ͓͚ΔΞΫγϣϯΛϑοΫʹͨ͠Ϧετߋ৽ 4

Slide 5

Slide 5 text

Paging Library ʹ͓͚ΔΞΫγϣϯΛϑοΫʹͨ͠Ϧετߋ৽ 5

Slide 6

Slide 6 text

ΫϩεϛʔͰͷར༻ྫ — Ϧετʹͳ͍ͬͯΔͱ͜Ζ͸͢΂ ͯ Paging Library Paging Library ʹ͓͚ΔΞΫγϣϯΛϑοΫʹͨ͠Ϧετߋ৽ 6

Slide 7

Slide 7 text

ΞΫγϣϯΛϑοΫʹͨ͠Ϧετߋ ৽ — ඇදࣔϢʔβʔϦετͳͲ — ʮϘλϯΛԡ͢ → API Λୟ͘ → View Λߋ৽͢Δʯͱ͍͏ྲྀΕ͕ ༷ʑͳ৔໘Ͱൃੜ Paging Library ʹ͓͚ΔΞΫγϣϯΛϑοΫʹͨ͠Ϧετߋ৽ 7

Slide 8

Slide 8 text

͸·ͬͨͱ͜Ζ — PagedList ͸ཁૉͷ௥Ճ΍ߋ৽ɺ࡟আ͕Ͱ͖ͳ͍ Paging Library ʹ͓͚ΔΞΫγϣϯΛϑοΫʹͨ͠Ϧετߋ৽ 8

Slide 9

Slide 9 text

PagedList ͸ཁૉͷ௥Ճ΍ߋ৽ɺ࡟আ͕Ͱ͖ͳ͍ — issue tracker Ͱ͸ʮόά͡Όͳͯ͘ػೳ͕଍Γ͍ͯͳ͍ͩ ͚ͩʂʯͱ͍͏ٞ࿦͕1 1 https://issuetracker.google.com/issues/74916992 Paging Library ʹ͓͚ΔΞΫγϣϯΛϑοΫʹͨ͠Ϧετߋ৽ 9

Slide 10

Slide 10 text

PagedList ͸ MutableList Ͱ͸ͳ͍ʂ — googlesamples ͷ issue Ͱ͸ Room ࢖͓ͬͯίϝϯτ͕ ͋Δ2 — ΫϩεϛʔͰ͸͜ͷํ๏ͰରԠ 2 https://github.com/googlesamples/android-architecture-components/issues/281 Paging Library ʹ͓͚ΔΞΫγϣϯΛϑοΫʹͨ͠Ϧετߋ৽ 10

Slide 11

Slide 11 text

Room ܦ༝ͰϦετදࣔ Paging Library ʹ͓͚ΔΞΫγϣϯΛϑοΫʹͨ͠Ϧετߋ৽ 11

Slide 12

Slide 12 text

class UserBoundaryCallback( private val helper: UserPagingRequestHelper ) : PagedList.BoundaryCallback() { @MainThread override fun onZeroItemsLoaded() { } @MainThread override fun onItemAtFrontLoaded(itemAtFront: User) { } @MainThread override fun onItemAtEndLoaded(itemAtEnd: User) { super.onItemAtEndLoaded(itemAtEnd) // API Λୟ͍ͯ get data helper.loadAfterIfNotRunning(before = itemAtEnd.time) } } Paging Library ʹ͓͚ΔΞΫγϣϯΛϑοΫʹͨ͠Ϧετߋ৽ 12

Slide 13

Slide 13 text

@Dao interface UserDao { @Query("SELECT * FROM users") fun allUsers(): DataSource.Factory @Insert(onConflict = OnConflictStrategy.REPLACE) fun save(users: List): List } Paging Library ʹ͓͚ΔΞΫγϣϯΛϑοΫʹͨ͠Ϧετߋ৽ 13

Slide 14

Slide 14 text

private val config = PagedList.Config.Builder() .setEnablePlaceholders(false) .setInitialLoadSizeHint(LOAD_COUNT) .setPageSize(LOAD_COUNT) .build() private val helper = UserPagingRequestHelper().start() // ͜ͷ LiveData Λ Activity / Fragment Ͱ observe ͯ͠ submitList val users = LivePagedListBuilder(userDatabase.dao().allUsers(), config) .setBoundaryCallback(UserBoundaryCallback(helper)) .setFetchExecutor(executor) .build() fun updateUsers() { // DB ʹอଘ } fun deleteUser(userId: Long) { // DB ͷϢʔβʔΛߋ৽ͭͭ͠ɺ֘౰ API ΋ୟ͘ } Paging Library ʹ͓͚ΔΞΫγϣϯΛϑοΫʹͨ͠Ϧετߋ৽ 14

Slide 15

Slide 15 text

·ͱΊ — Paging Library ͱ Room Λ࢖ͬͯɺΞΫγϣϯΛϑοΫʹ ͨ͠Ϧετߋ৽ͷ࣮૷Λͨ͠ — PagedList Λ͍͡ΕΕ͹͍͍ͳͱࢥ͏͕ɺPaging Library ࣗମͷ໾ׂΛߟ͑Δͱ͜͏͢Δͷ͕ࣗવʁ — ࠓޙͷΞοϓσʔτʹظ଴ Paging Library ʹ͓͚ΔΞΫγϣϯΛϑοΫʹͨ͠Ϧετߋ৽ 15

Slide 16

Slide 16 text

͋Γ͕ͱ͏͍͟͝·ͨ͠ Paging Library ʹ͓͚ΔΞΫγϣϯΛϑοΫʹͨ͠Ϧετߋ৽ 16