Slide 1

Slide 1 text

"EBQUFSBOE $VTUPN-BZPVU QPUBUPUJQT

Slide 2

Slide 2 text

@cutmail • Fablic, Inc. • Co-Founder • Mobile Application Engineer

Slide 3

Slide 3 text

Adapterͷߴ଎Խ

Slide 4

Slide 4 text

Adapterͷߴ଎Խ • ViewHolder

Slide 5

Slide 5 text

ViewHolder • Adapterͷߴ଎Խख๏ • Adapter#getView()ͰfindViewById()ͷճ਺ΛݮΒ͢ (ViewΛ࢖͍·Θ͢)

Slide 6

Slide 6 text

public class ItemAdapter extends ArrayAdapter { private LayoutInflater inflater; private List 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Λੜ੒

Slide 7

Slide 7 text

ෳ਺ͷҟͳΔϨΠΞ΢τ 5JUMF 5JUMF 5JUMF 5JUMF %BUF %BUF %BUF

Slide 8

Slide 8 text

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ʹରͯ͠ͲͷϨΠΞ΢τΛ࢖͏͔

Slide 9

Slide 9 text

ෳ਺ϨΠΞ΢τ(ViewHolder) public static class ViewHolderOdd { TextView title; ImageView image; } public static class ViewHolderEven { TextView title; TextView detail; ImageView image; }

Slide 10

Slide 10 text

ෳ਺ϨΠΞ΢τ(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; } ௕͍

Slide 11

Slide 11 text

AdapterͷංେԽ • ViewHolder͸Adapter͕ංେ͠΍͍͢ • ෳ਺ϨΠΞ΢τରԠ͢Δͱ͞ΒʹංେԽ • Adapterͷ໾ׂ͸Viewͱදࣔσʔλͷbinding • Viewͷදࣔॲཧ͸֤ViewΫϥε͕ॲཧ͢Δ΂͖

Slide 12

Slide 12 text

Adapterͷߴ଎Խ • ViewHolder • Custom Layout

Slide 13

Slide 13 text

Custom Layoutͷಋೖ

Slide 14

Slide 14 text

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ͱಉ༷ͷޮՌ͕ಘΒΕΔ

Slide 15

Slide 15 text

@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पΓͷίʔυ͕ݮ͖ͬͯͬ͢Γ

Slide 16

Slide 16 text

ෳ਺ϨΠΞ΢τ(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; }

Slide 17

Slide 17 text

ϦετͷදࣔཁૉΛमਖ਼Λ͢Δࡍ͸ AdapterͰ͸ͳ͘ɺ Custom LayoutΫϥεΛमਖ਼͢Ε͹OK

Slide 18

Slide 18 text

ଞͷAdapterͰCustom Layout Λ࢖͏͜ͱ΋Մೳ

Slide 19

Slide 19 text

(SJE7JFX΋ಉ༷ʹରԠՄೳ

Slide 20

Slide 20 text

·ͱΊ • Custom LayoutΛ࢖͏͜ͱͰAdapterͷංେԽ͕๷ ͛Δ

Slide 21

Slide 21 text

͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ɻ