Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Epoxyを用いたレイアウト構築術
Search
kobaken
August 27, 2019
Programming
270
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Epoxyを用いたレイアウト構築術
8/27(火)に開催された pixiv App Night(ゲスト: Bitrise) での発表資料です
kobaken
August 27, 2019
More Decks by kobaken
See All by kobaken
AIがレビューする時代に、 Androidエンジニアは何をレビューするのか 〜 土台づくりとレビュー再設計 〜
kobaken0029
3
720
In the Age of AI Code Review, What Should Android Engineers Review? - Building the Foundation & Redesigning Code Review -
kobaken0029
0
32
複数行のTextで中間省略(…)を実現する
kobaken0029
0
87
Jetpack Compose Preview実践ガイド
kobaken0029
0
170
Serializable / Parcelableとの上手な付き合い方
kobaken0029
0
230
Kotlinの好きなところ
kobaken0029
0
1.4k
Compose駆動開発のためのマルチモジュール化
kobaken0029
0
280
DataStoreを導入してみた
kobaken0029
1
400
Androidエンジニアが1週間でiOSアプリ開発を学び、1ヶ月で大規模アプリ開発にJOINした話
kobaken0029
0
3.9k
Other Decks in Programming
See All in Programming
in-process GraphQL のすすめ #ginzajs
izumin5210
4
1.5k
レビュー履歴をAIに食わせて、 Compose移行を加速するs
shihochan
0
270
LoopHub - ローカルで動く GitHub で、AI と共同開発
jugyo
0
450
AWS DevOps Agentで インシデント対応をAIに任せたい
honmarkhunt
6
2.5k
Can LLMs Replicate 4 Years of Compose Migration? Exploring the boundaries of automation with 279 XML files from a real product
makun
0
130
Kiroで創り、AgentCoreで繋ぐ!AWSで実践する「AI-DLC」から「AIエージェント統合」までの最新地図
licux
2
350
tsc.rip を支える技術 / Kyoto.なんか #8
susisu
0
4.3k
Go を使い始めて 2 ヶ月の学び / My first two months with Go
contour_gara
0
420
[GoCon2026] When Goroutines Are Not Enough: Runtime Locality in High-Throughput Go
takehaya
3
400
【デモ】Kiroで体験する仕様駆動開発|設計からコーディングまでAIと進める開発フロー
cmkudo
0
600
Seeing Through Serverless: Observability for AWS Lambda with ADOT and CloudWatch Application Signals
seike460
PRO
1
120
高専キャリア LT 発表内容
crysta1221
6
5.6k
Featured
See All Featured
The Spectacular Lies of Maps
axbom
PRO
1
980
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.2k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
490
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6.1k
sira's awesome portfolio website redesign presentation
elsirapls
0
410
KATA
mclloyd
PRO
35
15k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
260
The untapped power of vector embeddings
frankvandijk
2
1.9k
The #1 spot is gone: here's how to win anyway
tamaranovitovic
3
1.2k
Thoughts on Productivity
jonyablonski
76
5.4k
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
510
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
3k
Transcript
EpoxyΛ༻͍ͨϨΠΞτߏஙज़ pixiv.inc kobaken
kobaken ϐΫγϒגࣜձࣾ AndroidΞϓϦΤϯδχΞ Kotlin / Swift / Ruby
༏ / εϚϒϥ / ϙέΧ Twitter: @koba_dog_ GitHub: @kobaken0029
ɾEpoxyͬͯԿʁ ɾྨࣅϥΠϒϥϦʁ ɾEpoxyΛ͏ͱͲ͏ศརʹͳΔʁ ɾpixiv Sketch AndroidͰͷ׆༻ࣄྫ Index
EpoxyͬͯԿʁ
EpoxyͬͯԿʁ RecyclerView(ϦετάϦουදࣔʹ͏)ʹΑΔෳࡶͳϨΠΞτΛએݴతʹ ߏஙग़དྷΔAndroidϥΠϒϥϦɻAirbnbɻ https://github.com/airbnb/epoxy
ྨࣅϥΠϒϥϦʁ
ྨࣅϥΠϒϥϦʁ RecyclerViewΛ͍͍ײ͡ʹ͢Δܥ ɾGroupie એݴతʹUIΛΈཱͯΒΕΔܥ ɾKotlin/anko ɾJetpack Compose ɾsquare/contour←NEW!
એݴతʹUIΛΈཱͯΒΕΔܥ ɾSwiftUI
Ͱɺ࣮ࡍͲ͏ศརʹͳΔͷʁʁʁ
EpoxyΛ͏ͱͲ͏ศརʹͳΔʁ ɾAdapterΛॻ͔ͳ͍͍ͯ͘ʂˡ͜Ε͖͢ ɾࠩཧΛࣗಈͰͬͯ͘ΕΔʂˡ͜Ε͖͢ ɾData Binding ʹରԠ ɾศརͳΞυΦϯ͕ͨ͘͞Μʂ
EpoxyΛ͏ͱͲ͏ศརʹͳΔʁ ɾAdapterΛॻ͔ͳ͍͍ͯ͘ʂˡ͜Ε͖͢ ɾࠩཧΛࣗಈͰͬͯ͘ΕΔʂˡ͜Ε͖͢ ɾData Binding ʹରԠ ɾศརͳΞυΦϯ͕ͨ͘͞Μʂ
Adapter
%BUB4PVSDF -JTU "EBQUFS -JTU7JFX
σʔλ͕ViewʹΘΔ Α͏ʹ͍͍ײ͡ʹม ͯ͘͠ΕΔౕ
Ϧετදࣔ͢ΔͨΊͷ࠷খίʔυ
Ϧετදࣔ͢ΔͨΊͷ࠷খίʔυ
CustomAdapterͷ࣮
RecyclerView.Adapter with ViewTypeͷ࣮
&QPYZ͍ͬͯ͏ͷ͕͋ΔΑʂ ͔ΜͨΜͩΑʂ ΈΜͳͬͯΔΑʂ
Epoxyͩͱ͜͏
EpoxyΛ͏ͱͲ͏ศརʹͳΔʁ ɾAdapterΛॻ͔ͳ͍͍ͯ͘ʂˡ͜Ε͖͢ ɾࠩཧΛࣗಈͰͬͯ͘ΕΔʂˡ͜Ε͖͢ ɾData Binding ʹରԠ ɾศརͳΞυΦϯ͕ͨ͘͞Μʂ
EpoxyΛ͏ͱͲ͏ศརʹͳΔʁ ɾAdapterΛॻ͔ͳ͍͍ͯ͘ʂˡ͜Ε͖͢ ɾࠩཧΛࣗಈͰͬͯ͘ΕΔʂˡ͜Ε͖͢ ɾData Binding ʹରԠ ɾศརͳΞυΦϯ͕ͨ͘͞Μʂ
ࠩཧ ɾEpoxyController͕ࣗಈͰࠩΛऔͬͯ͘ΕΔ ɾͦ͜Ͱੜ͢ΔEpoxyModelͷequalshashCodeΛࢀর͍ͯ͠Δ ɾࠩߋ৽ΞϧΰϦζϜʹDiffUtilΛ࠾༻ ɾhttps://github.com/airbnb/epoxy/wiki/Diffing
EpoxyΛ͏ͱͲ͏ศརʹͳΔʁ ɾAdapterΛॻ͔ͳ͍͍ͯ͘ʂˡ͜Ε͖͢ ɾࠩཧΛࣗಈͰͬͯ͘ΕΔʂˡ͜Ε͖͢ ɾData Binding ʹରԠ ɾศརͳΞυΦϯ͕ͨ͘͞Μʂ
EpoxyΛ͏ͱͲ͏ศརʹͳΔʁ ɾAdapterΛॻ͔ͳ͍͍ͯ͘ʂˡ͜Ε͖͢ ɾࠩཧΛࣗಈͰͬͯ͘ΕΔʂˡ͜Ε͖͢ ɾData Binding ʹରԠ ɾศརͳΞυΦϯ͕ͨ͘͞Μʂ
EpoxyModelͱ EpoxyEpoxyModelΛհͯ͠ViewʹDataΛόΠϯυ͍ͯ͠Δ EpoxyModelࣗಈੜ͞ΕΔ EpoxyModelΛੜ͢Δํ๏3ͭ ɾCustomViewʹରͯ͠ΞϊςʔγϣϯΛ༩͢Δ ɾEpoxyModelWithHolderΛܧঝͯ͠ΞϊςʔγϣϯΛ༩͢Δ ɾpackage-info.javaΛهड़ͯ͠xmlΛData BindingରԠ͢Δ
Data BindingʹରԠ ɾ֤ηϧʹؔͯ͠େମͷ߹ɺxmlͷΈͰ݁Ͱ͖Δ ɾCustomViewΛ࡞Βͳͯ͘ྑ͍ ɾࠐΈೖͬͨॲཧBindingAdapterͰΓग़͢
EpoxyΛ͏ͱͲ͏ศརʹͳΔʁ ɾAdapterΛॻ͔ͳ͍͍ͯ͘ʂˡ͜Ε͖͢ ɾࠩཧΛࣗಈͰͬͯ͘ΕΔʂˡ͜Ε͖͢ ɾData Binding ʹରԠ ɾศརͳΞυΦϯ͕ͨ͘͞Μʂ
ศརͳΞυΦϯ ɾը૾ͷPreLoading on ɾศརʹΧελϚΠζ͞ΕͨRecyclerViewΛఏڙ ɾΧϧʔηϧ࣮ ɾεϫΠϓυϥοά&υϩοϓ
pixiv Sketch AndroidͰͷ׆༻ࣄྫ
௨ը໘
௨ը໘ ɾpackage-info.java ɾlayout xml ɾdata class ɾController ɾActivity/Fragment
package-info.java
Layout xml
Layout xml
Data class
Controller (ఆٛ)
Controller (Listener)
Controller
Activity / Fragment
ଞʹ…
ɾEpoxyෳࡶͳϦετ/ίϨΫγϣϯUIΛએݴతʹ࣮ग़དྷΔ ɾ֤row/cellͷ࣮ʹूதͰ͖Δ ɾEpoxyModelͷࠩΛݟͯɺࣗಈͰࠩߋ৽ͯ͘͠ΕΔ ɾ๛ͳΞυΦϯ͕ศར ɾEpoxy͍͍ͧ ·ͱΊ
Let’s Epoxy!