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
Adapter and Custom Layout
Search
Tatsuya Arai
February 18, 2015
Programming
990
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Adapter and Custom Layout
Tatsuya Arai
February 18, 2015
More Decks by Tatsuya Arai
See All by Tatsuya Arai
5 minutes PWA
cutmail
0
240
Androidアプリ開発における技術顧問としての役割 #DroidKaigi 2018
cutmail
1
2.5k
4年続くアプリにおけるチーム開発 #DroidKaigi 2017
cutmail
13
5k
フリルにおけるドッグフーディング / Fashion Tech Meetup #2 LT
cutmail
2
4k
いかにして不具合発見時の フィードバックを素早く行うか #potatotips 12
cutmail
0
2.6k
Androidのログ出力をいい感じにする #potatotips 9
cutmail
8
10k
コーディング規約を緩く守りつつ仕事の成果を出す方法
cutmail
2
670
Other Decks in Programming
See All in Programming
AIエージェントで 変わるAndroid開発環境
takahirom
2
660
地域 SRE コミュニティ最前線 - ホンマでっかSRE勉強会
tk3fftk
0
230
SREは、MCPとSRE Agentをこう使え!
kazumax55
0
150
分散システム、なんですぐ死んでしまうん?耐障害性を高めたいあなたのためのレジリエンスパターン入門
mshibuya
7
6.1k
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
230
任せる範囲はこう広がった / How the Scope of AI Delegation Has Expanded
nrslib
1
260
Apache Hive: そしてCloud Native Lakehouseへ
okumin
1
120
琵琶湖の水は止められてもNet--HTTPのリトライは止められない / You might be able to stop the water flow of Lake Biwa but you can't stop Net::HTTP retries
luccafort
PRO
0
380
yield再入門 #phpcon
o0h
PRO
0
370
AI 輔助遺留系統現代化的經驗分享
jame2408
1
1.2k
技術記事、 専門家としてのプログラマ、 言語化
mizchi
14
7.5k
Terraform標準の組織で AWS CDKをどう使うか
mu7889yoon
0
180
Featured
See All Featured
How to Ace a Technical Interview
jacobian
281
24k
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
4 Signs Your Business is Dying
shpigford
187
22k
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
420
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Done Done
chrislema
186
16k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
410
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
350
Between Models and Reality
mayunak
4
370
Discover your Explorer Soul
emna__ayadi
2
1.2k
Fashionably flexible responsive web design (full day workshop)
malarkey
408
67k
Transcript
"EBQUFSBOE $VTUPN-BZPVU QPUBUPUJQT
@cutmail • Fablic, Inc. • Co-Founder • Mobile Application Engineer
AdapterͷߴԽ
AdapterͷߴԽ • ViewHolder
ViewHolder • AdapterͷߴԽख๏ • Adapter#getView()ͰfindViewById()ͷճΛݮΒ͢ (ViewΛ͍·Θ͢)
public class ItemAdapter extends ArrayAdapter<Item> { private LayoutInflater inflater; private
List<Item> items; @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder; if (convertView == null) { convertView = inflater.inflate(R.layout.list_item, parent, false); viewHolder = new ViewHolder(); convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } Item item = getItem(position); viewHolder.titleView.setText(item.getItemName()); return convertView; } public static class ViewHolder { ImageView thumbnail; TextView titleView; public ViewHolder(View view) { this.thumbnail = (ImageView) view.findViewById(R.id.thumbnail); this.titleView = (TextView) view.findViewById(R.id.title); } } } 7JFXͷࢀরΛอ࣋ ॳճͷΈ7JFX)PMEFSΛੜ
ෳͷҟͳΔϨΠΞτ 5JUMF 5JUMF 5JUMF 5JUMF %BUF %BUF %BUF
ViewType @Override public int getViewTypeCount() { return 2; } @Override
public int getItemViewType(int position) { if (position % 1 == 0) { return VIEW_TYPE_ODD; } else { return VIEW_TYPE_EVEN; } } ϨΠΞτͷछྨ QPTJUJPOʹରͯ͠ͲͷϨΠΞτΛ͏͔
ෳϨΠΞτ(ViewHolder) public static class ViewHolderOdd { TextView title; ImageView image;
} public static class ViewHolderEven { TextView title; TextView detail; ImageView image; }
ෳϨΠΞτ(ViewHolder൛) @Override public View getView(int position, View convertView, ViewGroup parent)
{ ViewHolder1 viewHolder1; ViewHolder2 viewHolder2; Item item = getItem(position); switch (getItemViewType(position)) { case VIEW_TYPE_ODD: if (convertView == null) { convertView = inflater.inflate(R.layout.list_item_1, parent, false); viewHolder1 = new ViewHolder(convertView); convertView.setTag(viewHolder1); } else { viewHolder1 = 1(ViewHolder) convertView.getTag(); } holder.title.setText(item.getName()); Picasso.with(getContext()) .load(item.getImageUrl) .placeholder(R.drawable.icon_user) .error(R.drawable.icon_user) .resizeDimen(R.dimen.list_item_user_icon_size, R.dimen.list_item_user_icon_size) .centerCrop() .into(holder.imageView); break; case VIEW_TYPE_EVEN: ɾɾɾ ɾɾɾ return convertView; } ͍
AdapterͷංେԽ • ViewHolderAdapter͕ංେ͍͢͠ • ෳϨΠΞτରԠ͢Δͱ͞ΒʹංେԽ • AdapterͷׂViewͱදࣔσʔλͷbinding • Viewͷදࣔॲཧ֤ViewΫϥε͕ॲཧ͢Δ͖
AdapterͷߴԽ • ViewHolder • Custom Layout
Custom Layoutͷಋೖ
LayoutΛܧঝͯ͠Custom LayoutΛ࡞ public class NormalLayout extends LinearLayout { TextView titleView;
ImageView imageView; @Override protected void onFinishInflate() { super.onFinishInflate(); titleView = (TextView) findViewById(R.id.title); imageView = (ImageView) findViewById(R.id.image); } public void setItem(Item item) { titleView.setText(item.getItemName()); Picasso.with(getContext()) .load(item.getImageUrl) .placeholder(R.drawable.icon_user) .error(R.drawable.icon_user) .resizeDimen(R.dimen.icon_size, R.dimen.user_icon_size) .centerCrop() .into(holder.imageView); } } PO'JOJTI*OqBUF ͕ݺΕͨޙʹpOE7JFX#Z*E ͢Δ͜ͱͰ 7JFX)PMEFSͱಉ༷ͷޮՌ͕ಘΒΕΔ
@Override public View getView(int position, View convertView, ViewGroup parent) {
NormalLayout normalLayout; SpecialLayout specialLayout; Item item = getItem(position); switch (getItemViewType(position)) { case VIEW_TYPE_ODD: if (convertView != null && (convertView instanceof NormalLayout)) { normalLayout = (NormalLayout) convertView; } else { normalLayout = (NormalLayout) inflater.inflate(R.layout.list_item_odd, parent, false); } normalLayout.setItem(item); return normalLayout; case VIEW_TYPE_EVEN: ɾɾɾ return specialLayout; } return null; } ෳϨΠΞτ(Custom Layout൛) -BZPVUपΓͷίʔυ͕ݮ͖ͬͯͬ͢Γ
ෳϨΠΞτ(ViewHolder൛) @Override public View getView(int position, View convertView, ViewGroup parent)
{ ViewHolder1 viewHolder1; ViewHolder2 viewHolder2; Item item = getItem(position); switch (getItemViewType(position)) { case VIEW_TYPE_ODD: if (convertView == null) { convertView = inflater.inflate(R.layout.list_item_1, parent, false); viewHolder1 = new ViewHolder(convertView); convertView.setTag(viewHolder1); } else { viewHolder1 = 1(ViewHolder) convertView.getTag(); } holder.title.setText(item.getName()); Picasso.with(getContext()) .load(item.getImageUrl) .placeholder(R.drawable.icon_user) .error(R.drawable.icon_user) .resizeDimen(R.dimen.list_item_user_icon_size, R.dimen.list_item_user_icon_size) .centerCrop() .into(holder.imageView); break; case VIEW_TYPE_EVEN: ɾɾɾ ɾɾɾ return convertView; }
ϦετͷදࣔཁૉΛमਖ਼Λ͢Δࡍ AdapterͰͳ͘ɺ Custom LayoutΫϥεΛमਖ਼͢ΕOK
ଞͷAdapterͰCustom Layout Λ͏͜ͱՄೳ
(SJE7JFXಉ༷ʹରԠՄೳ
·ͱΊ • Custom LayoutΛ͏͜ͱͰAdapterͷංେԽ͕ ͛Δ
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ɻ