SlideShare une entreprise Scribd logo
1  sur  82
Télécharger pour lire hors ligne
Master of
RecyclerView
Yuki Anzai @ ABC 2015 Summer
• blog : Y.A.M の雑記帳
• y-anz-m.blogspot.com
• twitter : @yanzm (やんざむ)
• uPhyca Inc. (株式会社ウフィカ)
あんざいゆき
New
今日話す内容は
TechBoosterの
夏コミ本に
執筆してます
http://techbooster.github.io/c88/
事前のお知らせ
• 今日の資料 → 公開されます
• 今日の公演 → 録画&公開されます
RecyclerView
A flexible view for
providing a limited window
into a large data set.
RecyclerView
大規模なデータセットに、
限定されたウィンドウを
提供するための柔軟なビュー
RecyclerView
大規模なデータセットの一部を
ビューを再利用しながら
表示するためのコンポーネント
RecyclerView
ListViewとかGridView
みたいなやつ
RecyclerViewの構成
• RecyclerView
• データを表示するためのスクロール可能な
View
• RecyclerView
• データを表示するためのスクロール可能な
View
• RecyclerView.LayoutManager
• アイテム用のビューのサイズを計算し、配
置する
RecyclerViewの構成
• RecyclerView.Adapter
• RecyclerViewに表示するデータセットを
管理し、アイテム用のViewにデータを紐
づける
RecyclerViewの構成
• RecyclerView.Adapter
• RecyclerViewに表示するデータセットを
管理し、アイテム用のViewにデータを紐
づける
• RecyclerView.ViewHolder
• アイテム用のビューとメタデータを保持す
る
RecyclerViewの構成
RecyclerViewの構成
RecyclerView LayoutManager
Adapter
子ビュー配置
子ビュー
(ViewHolder)
にデータ紐付
Recycler
ViewHolderを再利用
再利用する
ViewHolder
ListViewの構成
RecyclerView LayoutManager
Adapter
子ビュー配置
子ビュー
(ViewHolder)
にデータ紐付
Recycler
ViewHolderを再利用
再利用する
ViewHolder
ListView
ListAdapter
ListViewの構成
ListView =
RecyclerView + LayoutManager + Recycler
+ その他もろもろの機能
ListAdapter = Adapter + ViewHolder
ListViewの構成
ListView =
RecyclerView + LayoutManager + Recycler
+ その他もろもろの機能
ListAdapter = Adapter + ViewHolder
ListView vs RecyclerView
ListView RecyclerView
区切り線 ⚪ 自分で実装
listSelector ⚪
onItemClick ⚪ 自分で実装
choiceMode ⚪
ListView vs RecyclerView
ListView RecyclerView
Filter ⚪ 自分で実装
FadingEdge ⚪ 自分で実装
Header, Footer ⚪ 自分で実装
StaggeredGrid ⚪
ListView vs RecyclerView
ListView RecyclerView
追加・削除の
アニメーション
自分で実装 ⚪
Swipe to Dismiss 自分で実装 ⚪
Drag & Drop 自分で実装 ⚪
横スクロール配置 ⚪
RecyclerViewの
一番シンプルな
使い方
最低限必要なもの
• RecyclerView
• RecyclerView.LayoutManager
• RecyclerView.Adapter
• RecyclerView.ViewHolder
最低限必要なもの
• RecyclerView
• RecyclerView.LayoutManager
• RecyclerView.Adapter
• RecyclerView.ViewHolder
<?xml version="1.0" encoding="utf-8"?>

<android.support.v7.widget.RecyclerView 

xmlns:android="http://schemas.android.com/apk/res/a
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/recycler_view"

android:layout_width="match_parent"

android:layout_height="match_parent"

app:layoutManager="LinearLayoutManager" />
RecyclerView + LayoutManager
<?xml version="1.0" encoding="utf-8"?>

<android.support.v7.widget.RecyclerView

xmlns:android="http://schemas.android.com/apk/res/a
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/recycler_view"

android:layout_width="match_parent"

android:layout_height="match_parent"

app:layoutManager

="android.support.v7.widget.LinearLayoutManager
RecyclerView + LayoutManager
RecyclerView + LayoutManager
<?xml version="1.0" encoding="utf-8"?>

<android.support.v7.widget.RecyclerView

xmlns:android="http://schemas.android.com/apk/res/a
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/recycler_view"

android:layout_width="match_parent"

android:layout_height="match_parent"

app:layoutManager

=“net.yanzm.sample.MyLayoutManager” />
最低限必要なもの
• RecyclerView
• RecyclerView.LayoutManager
• RecyclerView.Adapter
• RecyclerView.ViewHolder
private static class ViewHolder extends

RecyclerView.ViewHolder {

static final int LAYOUT_ID

= android.R.layout.simple_list_item_1;



final TextView textView;



public ViewHolder(View itemView) {

super(itemView);

textView = (TextView)

itemView.findViewById(android.R.id.text1);

}

}
ViewHolder
private static class SimpleAdapter extends

RecyclerView.Adapter<ViewHolder> {



private final LayoutInflater inflater;

private final List<String> data;



private SimpleAdapter(Context context, List<String> data) {
this.inflater = LayoutInflater.from(context);

this.data = data;

}



@Override

public ViewHolder onCreateViewHolder(ViewGroup parent,

int viewType) {

return new ViewHolder(inflater

.inflate(ViewHolder.LAYOUT_ID, parent, false));
}



@Override

Adapter


private SimpleAdapter(Context context, List<String> data) {
this.inflater = LayoutInflater.from(context);

this.data = data;

}



@Override

public ViewHolder onCreateViewHolder(ViewGroup parent,

int viewType) {

return new ViewHolder(inflater

.inflate(ViewHolder.LAYOUT_ID, parent, false));
}



@Override

public void onBindViewHolder(ViewHolder holder, 

int position) {

String text = data.get(position);

holder.textView.setText(text);

}



@Override

public int getItemCount() {

return data.size();

}

}
Adapter
public class SimpleSampleActivity extends Activity {



@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_simple_sample);



RecyclerView recyclerView = (RecyclerView)

findViewById(R.id.recycler_view);

recyclerView.setHasFixedSize(true);



List<String> data = new ArrayList<>();

for (int i = 0; i < 30; i++) {

data.add("Item : " + i);

}



final SimpleAdapter adapter =

Activity
setContentView(R.layout.activity_simple_sample);



RecyclerView recyclerView = (RecyclerView)

findViewById(R.id.recycler_view);

recyclerView.setHasFixedSize(true);



List<String> data = new ArrayList<>();

for (int i = 0; i < 30; i++) {

data.add("Item : " + i);

}



final SimpleAdapter adapter =

new SimpleAdapter(this, data);

recyclerView.setAdapter(adapter);

}




private static class ViewHolder extends

RecyclerView.ViewHolder {…}
private static class SimpleAdapter extends

RecyclerView.Adapter<ViewHolder> {…}
}

Activity
LinearLayoutManager
GridLayoutManager
StaggeredGridLayoutManager
LinearLayoutManager
• 設定項目
• orientation
• reverseLayout
• stackFromEnd
orientation
• デフォルトはLinearLayoutManager.VERTICAL
<?xml version="1.0" encoding="utf-8"?>

<android.support.v7.widget.RecyclerView

…

android:orientation="horizontal"

app:layoutManager="LinearLayoutManager" />
new LinearLayoutManager(this,
LinearLayoutManager.HORIZONTAL, false);
layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
or
or
app:reverseLayout="true" app:stackFromEnd="true"
GridLayoutManager
• 設定項目
• spanCount
• orientation
• reverseLayout
• stackFromEnd
spanCount
• 列数、デフォルトは1
<?xml version="1.0" encoding="utf-8"?>

<android.support.v7.widget.RecyclerView

…

app:layoutManager="GridLayoutManager"

app:spanCount="2" />
new GridLayoutManager(this, 2);
layoutManager.setSpanCount(2);
or
or
StaggeredGridLayoutManager
• 設定項目
• spanCount
• orientation
• reverseLayout
ItemDecorationで
Dividerをつける
ItemDecoration
• 装飾を行うためのクラス
• アイテム用のViewのoffsetを指定
• onDraw()でRecyclerViewの下に描画
• onDrawOver()でRecyclerVieの上に描画
アイテム用のViewのOffsetを指定
final int offset =
(int) (8 * getResources().getDisplayMetrics().density);



final RecyclerView.ItemDecoration itemDecoration =

new RecyclerView.ItemDecoration() {

@Override

public void getItemOffsets(Rect outRect,

View view,

RecyclerView parent,

RecyclerView.State state) {

outRect.set(offset, offset, offset, offset);

}

};

recyclerView.addItemDecoration(itemDecoration);
アイテム用のViewのOffsetを指定
final RecyclerView.ItemDecoration itemDecoration =

new RecyclerView.ItemDecoration() {

@Override

public void getItemOffsets(Rect outRect,

View view,

RecyclerView parent,

RecyclerView.State state) {

int position = ((RecyclerView.LayoutParams)
view.getLayoutParams()).getViewLayoutPosition();

if (position == 0) {

outRect.set(offset, offset, offset, offset);

} else {

outRect.set(offset, 0, offset, offset);

}

}

};


recyclerView.addItemDecoration(itemDecoration);
private static class DividerDecoration extends

RecyclerView.ItemDecoration {



private final Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
private final int dividerHeight;



public DividerDecoration(Resources res) {

paint.setColor(Color.GRAY);

dividerHeight

= (int) (4 * res.getDisplayMetrics().density);

}



@Override

public void getItemOffsets(Rect outRect,

View view,

RecyclerView parent,

RecyclerView.State state) {

int position = ((RecyclerView.LayoutParams)

view.getLayoutParams()).getViewLayoutPosition();

Dividerを描画
dividerHeight

= (int) (4 * res.getDisplayMetrics().density);

}



@Override

public void getItemOffsets(Rect outRect,

View view,

RecyclerView parent,

RecyclerView.State state) {

int position = ((RecyclerView.LayoutParams)

view.getLayoutParams()).getViewLayoutPosition();

// 位置が2番目以降なら上部にdividerを描画したいので、

// divider分だけ上をあける

int top = position == 0 ? 0 : dividerHeight;

outRect.set(0, top, 0, 0);

}



@Override

public void onDrawOver(Canvas c, RecyclerView parent,

RecyclerView.State state) {

super.onDrawOver(c, parent, state);

// アイテムのビューより上に描画される

}
Dividerを描画
@Override

public void onDraw(Canvas c, RecyclerView parent,

RecyclerView.State state) {

super.onDraw(c, parent, state);

// アイテムのビューより下に描画される



final RecyclerView.LayoutManager manager =

parent.getLayoutManager();

final int left = parent.getPaddingLeft();

final int right = parent.getWidth()

- parent.getPaddingRight();

final int childCount = parent.getChildCount();

for (int i = 1; i < childCount; i++) {

final View child = parent.getChildAt(i);

final RecyclerView.LayoutParams params =

(RecyclerView.LayoutParams) child.getLayoutParams()
if (params.getViewLayoutPosition() == 0) {

continue;

}

// ViewCompat.getTranslationY()を入れないと

Dividerを描画


final RecyclerView.LayoutManager manager =

parent.getLayoutManager();

final int left = parent.getPaddingLeft();

final int right = parent.getWidth()

- parent.getPaddingRight();

final int childCount = parent.getChildCount();

for (int i = 1; i < childCount; i++) {

final View child = parent.getChildAt(i);

final RecyclerView.LayoutParams params =

(RecyclerView.LayoutParams) child.getLayoutParams()
if (params.getViewLayoutPosition() == 0) {

continue;

}

// ViewCompat.getTranslationY()を入れないと

// 追加・削除のアニメーション時の位置が変になる

final int top = manager.getDecoratedTop(child)

- params.topMargin

+ Math.round(ViewCompat.getTranslationY(child))
final int bottom = top + dividerHeight;

c.drawRect(left, top, right, bottom, paint);

}

}

}
Dividerを描画
onItemClick
OnItemClick
• 方法がいくつかある
• ViewHolderのitemViewに
View.setOnClickListener
• ItemDecorationでタップされたアイテムの
位置にselectorを描画
OnItemClick
• 方法がいくつかある
• ViewHolderのitemViewに
View.setOnClickListener
• ItemDecorationでタップされたアイテムの
位置にselectorを描画
v17 leanback
library はこっち
// selectableItemBackgroundに指定されている
// リソースIDの値を取得しておく

TypedValue val = new TypedValue();

if (getTheme() != null) {

getTheme().resolveAttribute(

android.R.attr.selectableItemBackground,
val, true);

}

final int backgroundResId = val.resourceId;



final SimpleAdapter adapter = new SimpleAdapter(this, data) {

@Override

public ViewHolder onCreateViewHolder(ViewGroup parent,
int viewType) {

final ViewHolder viewHolder
= super.onCreateViewHolder(parent, viewType);

viewHolder.itemView.setBackgroundResource(backgroundRes
viewHolder.itemView.setOnClickListener(
OnItemClick
final SimpleAdapter adapter = new SimpleAdapter(this, data) {

@Override

public ViewHolder onCreateViewHolder(ViewGroup parent,
int viewType) {

final ViewHolder viewHolder
= super.onCreateViewHolder(parent, viewType);

viewHolder.itemView.setBackgroundResource(backgroundRes
viewHolder.itemView.setOnClickListener(
new View.OnClickListener() {

@Override

public void onClick(View v) {

int position = viewHolder

.getAdapterPosition();

Toast.makeText(v.getContext(),

"Position = " + position,

Toast.LENGTH_SHORT).show();

}

});

return viewHolder;

}

};

recyclerView.setAdapter(adapter);
OnItemClick
データの追加・削除・変更
notify**
• ArrayAdapterに相当するものは用意されていない
• データの追加・削除・変更時にはnotifyItem**()を呼ぶ
• notifyDataSetChanged()はそれ以外のときだけにする
notify**
• notifyItemChanged(int position) : positionの位置のアイテ
ムの変更された
• notifyItemInserted(int position) : posiitonの位置にアイテム
が追加された
• notifyItemRemoved(int position) : positionの位置のアイテ
ムが削除された
• notifyItemMoved(int fromPosition, int toPosition) :
fromPositionにあったアイテムがtoPositionに移動した
notify**
• notifyItemRangeChanged(int positionStart, int itemCount) :
positionStartからitemCount個のアイテムが変更された
• notifyItemRangeInserted(int positionStart, int itemCount) :
positionStartにitemCount個のアイテムが追加された
• notifyItemRangeRemoved(int positionStart, int
itemCount) : positionStartからitemCount個のアイテムが削
除された
• notifyDataSetChanged() : データセットが変更された
public abstract class RecyclerArrayAdapter<T, VH extends
RecyclerView.ViewHolder>

extends RecyclerView.Adapter<VH> {



private final Object lock = new Object();

private final Context context;

private final List<T> objects;



public RecyclerArrayAdapter(Context context) {

this(context, new ArrayList<T>());

}



public RecyclerArrayAdapter(Context context, List<T> objects
this.context = context;

this.objects = objects;

}



public void add(@NonNull T object) {

final int position = objects.size();

ArrayAdapter的なRecyclerView用Adapter


public RecyclerArrayAdapter(Context context, List<T> objects
this.context = context;

this.objects = objects;

}



public void add(@NonNull T object) {

final int position = objects.size();

synchronized (lock) {

objects.add(object);

}

notifyItemInserted(position);

}



public void addAll(@NonNull Collection<? extends T> collecti
final int positionStart = objects.size();

final int itemCount = collection.size();

synchronized (lock) {

objects.addAll(collection);

}

notifyItemRangeInserted(positionStart, itemCount);

}



public void insert(@NonNull T object, int index) {

synchronized (lock) {

ArrayAdapter的なRecyclerView用Adapter
objects.addAll(collection);

}

notifyItemRangeInserted(positionStart, itemCount);

}



public void insert(@NonNull T object, int index) {

synchronized (lock) {

objects.add(index, object);

}

notifyItemInserted(index);

}



public void remove(@NonNull T object) {

int position = getPosition(object);

synchronized (lock) {

objects.remove(object);

}

notifyItemRemoved(position);

}



public void clear() {

final int itemCount = objects.size();

synchronized (lock) {

objects.clear();

}

notifyItemRangeRemoved(0, itemCount);

ArrayAdapter的なRecyclerView用Adapter
SwipeToDismiss
と
Drag & Drop
ItemTouchHelper
• RecyclerViewに swipe to dismiss と drag & drop による並
び替え機能を追加するためにユーティリティクラス
ItemTouchHelper.Callback callback = …;

ItemTouchHelper itemTouchHelper =
new ItemTouchHelper(callback);

itemTouchHelper.attachToRecyclerView(recyclerView);
swipe to dismiss
• ItemTouchHelper.Callbackのコンストラクタの第2引数で
スワイプ方向を指定
• スワイプされたらonSwiped()が呼ばれる
swipe to dismiss
int swipeDirs = ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT;

ItemTouchHelper.Callback callback =
new ItemTouchHelper.SimpleCallback(0, swipeDirs) {

…



@Override

public void onSwiped(RecyclerView.ViewHolder viewHolder,
int direction) {

int position = viewHolder.getAdapterPosition();

adapter.remove(adapter.getItem(position));

}

};
drag and drop
• ItemTouchHelper.Callbackのコンストラクタの第1引数で
ドラッグ方向を指定
• ドロップされたらonMove()が呼ばれる
• ドラッグが開始できるようになったタイミングで
onSelectedChanged()が呼ばれる
• ドラッグを終了するときにclearView()が呼ばれる
int dragDirs = ItemTouchHelper.UP | ItemTouchHelper.DOWN;

ItemTouchHelper.Callback callback = new
ItemTouchHelper.SimpleCallback(dragDirs, 0) {

@Override

public boolean onMove(RecyclerView recyclerView,
RecyclerView.ViewHolder viewHolder,
RecyclerView.ViewHolder target) {

int from = viewHolder.getAdapterPosition();

int to = target.getAdapterPosition();

adapter.move(from, to);

return true;

}



…

};
drag and drop
int dragDirs = ItemTouchHelper.UP | ItemTouchHelper.DOWN;

ItemTouchHelper.Callback callback = new
ItemTouchHelper.SimpleCallback(dragDirs, 0) {

@Override

public boolean onMove(RecyclerView recyclerView,

RecyclerView.ViewHolder viewHolder,

RecyclerView.ViewHolder target) {

int from = viewHolder.getAdapterPosition();

int to = target.getAdapterPosition();

adapter.move(from, to);

return true;

}



@Override

public void onSelectedChanged(RecyclerView.ViewHolder viewHo
int actionState) {

if (actionState != ItemTouchHelper.ACTION_STATE_IDLE) {

viewHolder.itemView.setBackgroundColor(Color.LTGRAY)
}

drag and drop
int to = target.getAdapterPosition();

adapter.move(from, to);

return true;

}



@Override

public void onSelectedChanged(RecyclerView.ViewHolder viewHo
int actionState) {

if (actionState != ItemTouchHelper.ACTION_STATE_IDLE) {

viewHolder.itemView.setBackgroundColor(Color.LTGRAY)
}

super.onSelectedChanged(viewHolder, actionState);

}



@Override

public void clearView(RecyclerView recyclerView,

RecyclerView.ViewHolder viewHolder) {

super.clearView(recyclerView, viewHolder);

viewHolder.itemView.setBackgroundColor(Color.TRANSPARENT
}



…

}

};
drag and drop
独自のLayoutManager
独自のLayoutManager
1. RecyclerView.LayoutManagerを継承
2. generateDefaultLayoutParams() で
RecyclerView.LayoutParams() を返す
3. onLayoutChildren()で子ビューを配置
4. scrollVerticallyBy(), scrollHorizontallyBy()でスクロール分
だけ子ビューを移動&足りない分のビューを追加
onLayoutChildren()で子ビュー配置
1. detachAndScrapAttachedViews(recycler)で現在のビュー
をリサイクル対象にする
2. recycler.getViewForPosition(i)でアイテム用のビューを取得
3. addView()
4. measureChildWithMargins()でビューのサイズを計算
5. layoutDecorated(v, left, top, right, bottom)で配置
public class SimpleListLayoutManager extends
RecyclerView.LayoutManager {



@Override

public RecyclerView.LayoutParams generateDefaultLayoutParams()
return new RecyclerView.LayoutParams(

ViewGroup.LayoutParams.MATCH_PARENT,

ViewGroup.LayoutParams.WRAP_CONTENT);

}



@Override

public void onLayoutChildren(RecyclerView.Recycler recycler,
RecyclerView.State state) {
// 現在表示されている一番上のビューの位置を保持しておく

final View lastTopView = getChildCount() > 0 ?
getChildAt(0) : null;

final int lastTop = lastTopView != null ?
lastTopView.getTop() : getPaddingTop();

final int firstPosition = lastTopView != null ?
getPosition(lastTopView) : 0;

独自のLayoutManager
final int lastTop = lastTopView != null ?
lastTopView.getTop() : getPaddingTop();

final int firstPosition = lastTopView != null ?
getPosition(lastTopView) : 0;



// 現在のビューをスクラップにする

detachAndScrapAttachedViews(recycler);



int top = lastTop;

int bottom;

final int parentLeft = getPaddingLeft();

final int parentRight = getWidth() - getPaddingRight();

final int parentBottom = getHeight() - getPaddingBottom();



final int count = state.getItemCount();

for (int i = 0; firstPosition + i < count &&
top < parentBottom; i++, top = bottom) {

View v = recycler.getViewForPosition(firstPosition + i)
addView(v, i);

measureChildWithMargins(v, 0, 0);

bottom = top + getDecoratedMeasuredHeight(v);

layoutDecorated(v, parentLeft, top, parentRight, bottom
}

}

}
独自のLayoutManager
まとめ
まとめ
ListViewやGridViewで十分要求が満たせる場合は
無理にRecyclerViewを使う必要はありません
まとめ
• ListViewやGridViewでは実現できない配置にしたい
• スクロールの振る舞い(スピードや時間)をコントロール
したい
• アイテムが追加/削除されたときのアニメーションをコン
トロールしたい
• アイテムの選択をフォーカスでやりたい、フォーカスを細
かく制御したい
まとめ
• ListViewやGridViewでは実現できない配置にしたい
• スクロールの振る舞い(スピードや時間)をコントロール
したい
• アイテムが追加/削除されたときのアニメーションをコン
トロールしたい
• アイテムの選択をフォーカスでやりたい、フォーカスを細
かく制御したい
RecyclerView ならそれ簡単にできますよ
New
TechBoosterの
夏コミ本で
RecyclerViewに
ついて
書きます。
ありがとうございました。
http://techbooster.github.io/c88/

Contenu connexe

Tendances

Developing New Widgets for your Views in Owl
Developing New Widgets for your Views in OwlDeveloping New Widgets for your Views in Owl
Developing New Widgets for your Views in OwlOdoo
 
Odoo Experience 2018 - Visualizing Data in Odoo: How to Create a New View
Odoo Experience 2018 - Visualizing Data in Odoo: How to Create a New ViewOdoo Experience 2018 - Visualizing Data in Odoo: How to Create a New View
Odoo Experience 2018 - Visualizing Data in Odoo: How to Create a New ViewElínAnna Jónasdóttir
 
Discover GraphQL with Python, Graphene and Odoo
Discover GraphQL with Python, Graphene and OdooDiscover GraphQL with Python, Graphene and Odoo
Discover GraphQL with Python, Graphene and OdooOdoo
 
C++ Object Oriented Programming
C++  Object Oriented ProgrammingC++  Object Oriented Programming
C++ Object Oriented ProgrammingGamindu Udayanga
 
Kotlin for Android Development
Kotlin for Android DevelopmentKotlin for Android Development
Kotlin for Android DevelopmentSpeck&Tech
 
Python Class | Python Programming | Python Tutorial | Edureka
Python Class | Python Programming | Python Tutorial | EdurekaPython Class | Python Programming | Python Tutorial | Edureka
Python Class | Python Programming | Python Tutorial | EdurekaEdureka!
 
Python's magic methods
Python's magic methodsPython's magic methods
Python's magic methodsReuven Lerner
 
Domain Modeling with FP (DDD Europe 2020)
Domain Modeling with FP (DDD Europe 2020)Domain Modeling with FP (DDD Europe 2020)
Domain Modeling with FP (DDD Europe 2020)Scott Wlaschin
 
JavaScript Object Oriented Programming Cheat Sheet
JavaScript Object Oriented Programming Cheat SheetJavaScript Object Oriented Programming Cheat Sheet
JavaScript Object Oriented Programming Cheat SheetHDR1001
 
Object oriented programming in python
Object oriented programming in pythonObject oriented programming in python
Object oriented programming in pythonnitamhaske
 
Scala 3 by Example - Algebraic Data Types for Domain Driven Design - Part 1
Scala 3 by Example - Algebraic Data Types for Domain Driven Design - Part 1Scala 3 by Example - Algebraic Data Types for Domain Driven Design - Part 1
Scala 3 by Example - Algebraic Data Types for Domain Driven Design - Part 1Philip Schwarz
 
[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기
[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기
[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기NAVER Engineering
 
React + Redux + TypeScript === ♥
React + Redux + TypeScript === ♥React + Redux + TypeScript === ♥
React + Redux + TypeScript === ♥Remo Jansen
 
Kotlin presentation
Kotlin presentation Kotlin presentation
Kotlin presentation MobileAcademy
 
Odoo - From v7 to v8: the new api
Odoo - From v7 to v8: the new apiOdoo - From v7 to v8: the new api
Odoo - From v7 to v8: the new apiOdoo
 
Python/Flask Presentation
Python/Flask PresentationPython/Flask Presentation
Python/Flask PresentationParag Mujumdar
 

Tendances (20)

Developing New Widgets for your Views in Owl
Developing New Widgets for your Views in OwlDeveloping New Widgets for your Views in Owl
Developing New Widgets for your Views in Owl
 
Odoo Experience 2018 - Visualizing Data in Odoo: How to Create a New View
Odoo Experience 2018 - Visualizing Data in Odoo: How to Create a New ViewOdoo Experience 2018 - Visualizing Data in Odoo: How to Create a New View
Odoo Experience 2018 - Visualizing Data in Odoo: How to Create a New View
 
Discover GraphQL with Python, Graphene and Odoo
Discover GraphQL with Python, Graphene and OdooDiscover GraphQL with Python, Graphene and Odoo
Discover GraphQL with Python, Graphene and Odoo
 
C++ Object Oriented Programming
C++  Object Oriented ProgrammingC++  Object Oriented Programming
C++ Object Oriented Programming
 
Reactjs Basics
Reactjs BasicsReactjs Basics
Reactjs Basics
 
Kotlin for Android Development
Kotlin for Android DevelopmentKotlin for Android Development
Kotlin for Android Development
 
Python Class | Python Programming | Python Tutorial | Edureka
Python Class | Python Programming | Python Tutorial | EdurekaPython Class | Python Programming | Python Tutorial | Edureka
Python Class | Python Programming | Python Tutorial | Edureka
 
Python's magic methods
Python's magic methodsPython's magic methods
Python's magic methods
 
Provider vs BLoC vs Redux
Provider vs BLoC vs ReduxProvider vs BLoC vs Redux
Provider vs BLoC vs Redux
 
Domain Modeling with FP (DDD Europe 2020)
Domain Modeling with FP (DDD Europe 2020)Domain Modeling with FP (DDD Europe 2020)
Domain Modeling with FP (DDD Europe 2020)
 
JavaScript Object Oriented Programming Cheat Sheet
JavaScript Object Oriented Programming Cheat SheetJavaScript Object Oriented Programming Cheat Sheet
JavaScript Object Oriented Programming Cheat Sheet
 
Object oriented programming in python
Object oriented programming in pythonObject oriented programming in python
Object oriented programming in python
 
Scala 3 by Example - Algebraic Data Types for Domain Driven Design - Part 1
Scala 3 by Example - Algebraic Data Types for Domain Driven Design - Part 1Scala 3 by Example - Algebraic Data Types for Domain Driven Design - Part 1
Scala 3 by Example - Algebraic Data Types for Domain Driven Design - Part 1
 
[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기
[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기
[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기
 
React + Redux + TypeScript === ♥
React + Redux + TypeScript === ♥React + Redux + TypeScript === ♥
React + Redux + TypeScript === ♥
 
Kotlin presentation
Kotlin presentation Kotlin presentation
Kotlin presentation
 
Redux workshop
Redux workshopRedux workshop
Redux workshop
 
Odoo - From v7 to v8: the new api
Odoo - From v7 to v8: the new apiOdoo - From v7 to v8: the new api
Odoo - From v7 to v8: the new api
 
React js for beginners
React js for beginnersReact js for beginners
React js for beginners
 
Python/Flask Presentation
Python/Flask PresentationPython/Flask Presentation
Python/Flask Presentation
 

En vedette

Mastering RecyclerView Layouts
Mastering RecyclerView LayoutsMastering RecyclerView Layouts
Mastering RecyclerView LayoutsDave Smith
 
droidgirls Recyclerview
droidgirls Recyclerviewdroidgirls Recyclerview
droidgirls RecyclerviewYuki Anzai
 
Androidオールスターズ2016 yanzm
Androidオールスターズ2016 yanzmAndroidオールスターズ2016 yanzm
Androidオールスターズ2016 yanzmYuki Anzai
 
Whats's new in Android Studio at Google I/O extended in Fukuoka
Whats's new in Android Studio at Google I/O extended in FukuokaWhats's new in Android Studio at Google I/O extended in Fukuoka
Whats's new in Android Studio at Google I/O extended in FukuokaYuki Anzai
 
Activity, Fragment, CustomView の使い分け - マッチョなActivityにさよならする方法 -
Activity, Fragment, CustomView の使い分け - マッチョなActivityにさよならする方法 -Activity, Fragment, CustomView の使い分け - マッチョなActivityにさよならする方法 -
Activity, Fragment, CustomView の使い分け - マッチョなActivityにさよならする方法 -Yuki Anzai
 
Build and Distributing SDK Add-Ons
Build and Distributing SDK Add-OnsBuild and Distributing SDK Add-Ons
Build and Distributing SDK Add-OnsDave Smith
 
What's new in Android N at Google I/O extended in Fukuoka
What's new in Android N at Google I/O extended in FukuokaWhat's new in Android N at Google I/O extended in Fukuoka
What's new in Android N at Google I/O extended in FukuokaYuki Anzai
 
Customizing Theme and Style for Material Design : Droid Kaigi 2016
Customizing Theme and Style for Material Design : Droid Kaigi 2016Customizing Theme and Style for Material Design : Droid Kaigi 2016
Customizing Theme and Style for Material Design : Droid Kaigi 2016Yuki Anzai
 
The Tale of a Smooth RecyclerView
The Tale of a Smooth RecyclerViewThe Tale of a Smooth RecyclerView
The Tale of a Smooth RecyclerViewSimek Adam
 
AsyncTask アンチパターン
AsyncTask アンチパターンAsyncTask アンチパターン
AsyncTask アンチパターンHiroshi Kurokawa
 
How to read "marble diagram"
How to read "marble diagram"How to read "marble diagram"
How to read "marble diagram"Yuki Anzai
 
「Android アプリのガチ開 発者が Mobile Backend Starter を使ってみた」
「Android アプリのガチ開 発者が Mobile Backend Starter を使ってみた」「Android アプリのガチ開 発者が Mobile Backend Starter を使ってみた」
「Android アプリのガチ開 発者が Mobile Backend Starter を使ってみた」Yuki Anzai
 
Tech Talk #2: Android app performance tips
Tech Talk #2: Android app performance tipsTech Talk #2: Android app performance tips
Tech Talk #2: Android app performance tipsNexus FrontierTech
 
ExtraLayoutSpace of RecyclerView
ExtraLayoutSpace of RecyclerViewExtraLayoutSpace of RecyclerView
ExtraLayoutSpace of RecyclerViewMima Yuki
 
Android 02 - Recycler View Adapter
Android 02 - Recycler View AdapterAndroid 02 - Recycler View Adapter
Android 02 - Recycler View AdapterAline Borges
 
Android Training (AdapterView & Adapter)
Android Training (AdapterView & Adapter)Android Training (AdapterView & Adapter)
Android Training (AdapterView & Adapter)Khaled Anaqwa
 
Tutorial android - créer des apps
Tutorial android - créer des appsTutorial android - créer des apps
Tutorial android - créer des appsNoé Breiss
 
Architecture et Bonnes pratiques Android #DevoxxFr2016 Part2
Architecture et Bonnes pratiques Android #DevoxxFr2016 Part2Architecture et Bonnes pratiques Android #DevoxxFr2016 Part2
Architecture et Bonnes pratiques Android #DevoxxFr2016 Part2Mathias Seguy
 

En vedette (20)

Mastering RecyclerView Layouts
Mastering RecyclerView LayoutsMastering RecyclerView Layouts
Mastering RecyclerView Layouts
 
droidgirls Recyclerview
droidgirls Recyclerviewdroidgirls Recyclerview
droidgirls Recyclerview
 
Androidオールスターズ2016 yanzm
Androidオールスターズ2016 yanzmAndroidオールスターズ2016 yanzm
Androidオールスターズ2016 yanzm
 
Fun with RecyclerView
Fun with RecyclerViewFun with RecyclerView
Fun with RecyclerView
 
Whats's new in Android Studio at Google I/O extended in Fukuoka
Whats's new in Android Studio at Google I/O extended in FukuokaWhats's new in Android Studio at Google I/O extended in Fukuoka
Whats's new in Android Studio at Google I/O extended in Fukuoka
 
Activity, Fragment, CustomView の使い分け - マッチョなActivityにさよならする方法 -
Activity, Fragment, CustomView の使い分け - マッチョなActivityにさよならする方法 -Activity, Fragment, CustomView の使い分け - マッチョなActivityにさよならする方法 -
Activity, Fragment, CustomView の使い分け - マッチョなActivityにさよならする方法 -
 
Build and Distributing SDK Add-Ons
Build and Distributing SDK Add-OnsBuild and Distributing SDK Add-Ons
Build and Distributing SDK Add-Ons
 
What's new in Android N at Google I/O extended in Fukuoka
What's new in Android N at Google I/O extended in FukuokaWhat's new in Android N at Google I/O extended in Fukuoka
What's new in Android N at Google I/O extended in Fukuoka
 
Customizing Theme and Style for Material Design : Droid Kaigi 2016
Customizing Theme and Style for Material Design : Droid Kaigi 2016Customizing Theme and Style for Material Design : Droid Kaigi 2016
Customizing Theme and Style for Material Design : Droid Kaigi 2016
 
The Tale of a Smooth RecyclerView
The Tale of a Smooth RecyclerViewThe Tale of a Smooth RecyclerView
The Tale of a Smooth RecyclerView
 
AsyncTask アンチパターン
AsyncTask アンチパターンAsyncTask アンチパターン
AsyncTask アンチパターン
 
How to read "marble diagram"
How to read "marble diagram"How to read "marble diagram"
How to read "marble diagram"
 
「Android アプリのガチ開 発者が Mobile Backend Starter を使ってみた」
「Android アプリのガチ開 発者が Mobile Backend Starter を使ってみた」「Android アプリのガチ開 発者が Mobile Backend Starter を使ってみた」
「Android アプリのガチ開 発者が Mobile Backend Starter を使ってみた」
 
Tech Talk #2: Android app performance tips
Tech Talk #2: Android app performance tipsTech Talk #2: Android app performance tips
Tech Talk #2: Android app performance tips
 
Bonnes pratiques développement android
Bonnes pratiques développement androidBonnes pratiques développement android
Bonnes pratiques développement android
 
ExtraLayoutSpace of RecyclerView
ExtraLayoutSpace of RecyclerViewExtraLayoutSpace of RecyclerView
ExtraLayoutSpace of RecyclerView
 
Android 02 - Recycler View Adapter
Android 02 - Recycler View AdapterAndroid 02 - Recycler View Adapter
Android 02 - Recycler View Adapter
 
Android Training (AdapterView & Adapter)
Android Training (AdapterView & Adapter)Android Training (AdapterView & Adapter)
Android Training (AdapterView & Adapter)
 
Tutorial android - créer des apps
Tutorial android - créer des appsTutorial android - créer des apps
Tutorial android - créer des apps
 
Architecture et Bonnes pratiques Android #DevoxxFr2016 Part2
Architecture et Bonnes pratiques Android #DevoxxFr2016 Part2Architecture et Bonnes pratiques Android #DevoxxFr2016 Part2
Architecture et Bonnes pratiques Android #DevoxxFr2016 Part2
 

Similaire à Master of RecyclerView

初心者〜中級者 Android StudioによるAndroid勉強会資料(スライド)
初心者〜中級者 Android StudioによるAndroid勉強会資料(スライド)初心者〜中級者 Android StudioによるAndroid勉強会資料(スライド)
初心者〜中級者 Android StudioによるAndroid勉強会資料(スライド)Masafumi Terazono
 
「Windows 8 ストア アプリ開発 tips」 hokuriku.net vol.11 (2013年1月26日)
「Windows 8 ストア アプリ開発 tips」  hokuriku.net vol.11 (2013年1月26日)「Windows 8 ストア アプリ開発 tips」  hokuriku.net vol.11 (2013年1月26日)
「Windows 8 ストア アプリ開発 tips」 hokuriku.net vol.11 (2013年1月26日)Fujio Kojima
 
Android Architecture Componentsの新機能
Android Architecture Componentsの新機能Android Architecture Componentsの新機能
Android Architecture Componentsの新機能Damper Matsu
 
アップルのテンプレートは有害と考えられる
アップルのテンプレートは有害と考えられるアップルのテンプレートは有害と考えられる
アップルのテンプレートは有害と考えられるBrian Gesiak
 
Jetpack Composeのパフォーマンスの基本
Jetpack Composeのパフォーマンスの基本Jetpack Composeのパフォーマンスの基本
Jetpack Composeのパフォーマンスの基本Damper Matsu
 
Windows ストアアプリのgrid viewを入門してみた
Windows ストアアプリのgrid viewを入門してみたWindows ストアアプリのgrid viewを入門してみた
Windows ストアアプリのgrid viewを入門してみた一希 大田
 
第2回デザインパターン資料
第2回デザインパターン資料第2回デザインパターン資料
第2回デザインパターン資料gaaupp
 
AdapterToolboxでRecyclerViewを楽にする
AdapterToolboxでRecyclerViewを楽にするAdapterToolboxでRecyclerViewを楽にする
AdapterToolboxでRecyclerViewを楽にするTakao Sumitomo
 
.NETからActive Directoryデータにアクセス ~グループ情報の取得と表示~
.NETからActive Directoryデータにアクセス ~グループ情報の取得と表示~.NETからActive Directoryデータにアクセス ~グループ情報の取得と表示~
.NETからActive Directoryデータにアクセス ~グループ情報の取得と表示~Michio Koyama
 
.NETからActive Directoryデータにアクセス ~ユーザ情報の取得と表示~
.NETからActive Directoryデータにアクセス ~ユーザ情報の取得と表示~.NETからActive Directoryデータにアクセス ~ユーザ情報の取得と表示~
.NETからActive Directoryデータにアクセス ~ユーザ情報の取得と表示~Michio Koyama
 
Java ee6 with scala
Java ee6 with scalaJava ee6 with scala
Java ee6 with scalaSatoshi Kubo
 
RestKitの紹介 - Webサービスのクライアント実装補助フレームワーク -
RestKitの紹介 - Webサービスのクライアント実装補助フレームワーク -RestKitの紹介 - Webサービスのクライアント実装補助フレームワーク -
RestKitの紹介 - Webサービスのクライアント実装補助フレームワーク -次朗 永島
 
XOOPS Cube Conference 2012 Developer Workshop 3
XOOPS Cube Conference 2012 Developer Workshop 3XOOPS Cube Conference 2012 Developer Workshop 3
XOOPS Cube Conference 2012 Developer Workshop 3Hikawa Kilica
 
Active Directoryデータの "大きい整数"
Active Directoryデータの "大きい整数"Active Directoryデータの "大きい整数"
Active Directoryデータの "大きい整数"Michio Koyama
 

Similaire à Master of RecyclerView (20)

初心者〜中級者 Android StudioによるAndroid勉強会資料(スライド)
初心者〜中級者 Android StudioによるAndroid勉強会資料(スライド)初心者〜中級者 Android StudioによるAndroid勉強会資料(スライド)
初心者〜中級者 Android StudioによるAndroid勉強会資料(スライド)
 
「Windows 8 ストア アプリ開発 tips」 hokuriku.net vol.11 (2013年1月26日)
「Windows 8 ストア アプリ開発 tips」  hokuriku.net vol.11 (2013年1月26日)「Windows 8 ストア アプリ開発 tips」  hokuriku.net vol.11 (2013年1月26日)
「Windows 8 ストア アプリ開発 tips」 hokuriku.net vol.11 (2013年1月26日)
 
Blocksの活用法
Blocksの活用法Blocksの活用法
Blocksの活用法
 
Swiftyを試す
Swiftyを試すSwiftyを試す
Swiftyを試す
 
Android Architecture Componentsの新機能
Android Architecture Componentsの新機能Android Architecture Componentsの新機能
Android Architecture Componentsの新機能
 
アップルのテンプレートは有害と考えられる
アップルのテンプレートは有害と考えられるアップルのテンプレートは有害と考えられる
アップルのテンプレートは有害と考えられる
 
IgGrid 入門編
IgGrid 入門編IgGrid 入門編
IgGrid 入門編
 
Jetpack Composeのパフォーマンスの基本
Jetpack Composeのパフォーマンスの基本Jetpack Composeのパフォーマンスの基本
Jetpack Composeのパフォーマンスの基本
 
Windows ストアアプリのgrid viewを入門してみた
Windows ストアアプリのgrid viewを入門してみたWindows ストアアプリのgrid viewを入門してみた
Windows ストアアプリのgrid viewを入門してみた
 
第2回デザインパターン資料
第2回デザインパターン資料第2回デザインパターン資料
第2回デザインパターン資料
 
AdapterToolboxでRecyclerViewを楽にする
AdapterToolboxでRecyclerViewを楽にするAdapterToolboxでRecyclerViewを楽にする
AdapterToolboxでRecyclerViewを楽にする
 
jQuery超入門編
jQuery超入門編jQuery超入門編
jQuery超入門編
 
.NETからActive Directoryデータにアクセス ~グループ情報の取得と表示~
.NETからActive Directoryデータにアクセス ~グループ情報の取得と表示~.NETからActive Directoryデータにアクセス ~グループ情報の取得と表示~
.NETからActive Directoryデータにアクセス ~グループ情報の取得と表示~
 
Jetpack Workshop
Jetpack WorkshopJetpack Workshop
Jetpack Workshop
 
Entity Framework
Entity FrameworkEntity Framework
Entity Framework
 
.NETからActive Directoryデータにアクセス ~ユーザ情報の取得と表示~
.NETからActive Directoryデータにアクセス ~ユーザ情報の取得と表示~.NETからActive Directoryデータにアクセス ~ユーザ情報の取得と表示~
.NETからActive Directoryデータにアクセス ~ユーザ情報の取得と表示~
 
Java ee6 with scala
Java ee6 with scalaJava ee6 with scala
Java ee6 with scala
 
RestKitの紹介 - Webサービスのクライアント実装補助フレームワーク -
RestKitの紹介 - Webサービスのクライアント実装補助フレームワーク -RestKitの紹介 - Webサービスのクライアント実装補助フレームワーク -
RestKitの紹介 - Webサービスのクライアント実装補助フレームワーク -
 
XOOPS Cube Conference 2012 Developer Workshop 3
XOOPS Cube Conference 2012 Developer Workshop 3XOOPS Cube Conference 2012 Developer Workshop 3
XOOPS Cube Conference 2012 Developer Workshop 3
 
Active Directoryデータの "大きい整数"
Active Directoryデータの "大きい整数"Active Directoryデータの "大きい整数"
Active Directoryデータの "大きい整数"
 

Plus de Yuki Anzai

Watch face アプリを公開してみた
Watch face アプリを公開してみたWatch face アプリを公開してみた
Watch face アプリを公開してみたYuki Anzai
 
"あんざいゆき" x "秋葉ちひろ" はカンファレンスアプリをどう作るのか?
"あんざいゆき" x "秋葉ちひろ" はカンファレンスアプリをどう作るのか?"あんざいゆき" x "秋葉ちひろ" はカンファレンスアプリをどう作るのか?
"あんざいゆき" x "秋葉ちひろ" はカンファレンスアプリをどう作るのか?Yuki Anzai
 
Android Pattern Cookbook で見るトレンドの変遷
Android Pattern Cookbook で見るトレンドの変遷Android Pattern Cookbook で見るトレンドの変遷
Android Pattern Cookbook で見るトレンドの変遷Yuki Anzai
 
Sublime Text 2 で始める ReVIEW
Sublime Text 2 で始める ReVIEWSublime Text 2 で始める ReVIEW
Sublime Text 2 で始める ReVIEWYuki Anzai
 
ABC2013 Autumn あんざいゆき x 小太刀御禄 対談
ABC2013 Autumn あんざいゆき x 小太刀御禄 対談ABC2013 Autumn あんざいゆき x 小太刀御禄 対談
ABC2013 Autumn あんざいゆき x 小太刀御禄 対談Yuki Anzai
 
マルチスクリーン対応と最近のアプリの傾向
マルチスクリーン対応と最近のアプリの傾向マルチスクリーン対応と最近のアプリの傾向
マルチスクリーン対応と最近のアプリの傾向Yuki Anzai
 
アプリのUIを改善するための7ステップ ∼Bump Recorder の UI を設計してみたよ編∼
アプリのUIを改善するための7ステップ ∼Bump Recorder の UI を設計してみたよ編∼ アプリのUIを改善するための7ステップ ∼Bump Recorder の UI を設計してみたよ編∼
アプリのUIを改善するための7ステップ ∼Bump Recorder の UI を設計してみたよ編∼ Yuki Anzai
 
Fragment を使ってみよう
Fragment を使ってみようFragment を使ってみよう
Fragment を使ってみようYuki Anzai
 
Android Layout Cookbook Seminor
Android Layout Cookbook SeminorAndroid Layout Cookbook Seminor
Android Layout Cookbook SeminorYuki Anzai
 
ボクの開発スタイル
ボクの開発スタイルボクの開発スタイル
ボクの開発スタイルYuki Anzai
 
Android Layout 3分クッキング
Android Layout 3分クッキングAndroid Layout 3分クッキング
Android Layout 3分クッキングYuki Anzai
 
application Next Generation presented by android女子部
application Next Generation presented by android女子部application Next Generation presented by android女子部
application Next Generation presented by android女子部Yuki Anzai
 
Adapter & ListView & ExpandalbeListView
Adapter & ListView & ExpandalbeListViewAdapter & ListView & ExpandalbeListView
Adapter & ListView & ExpandalbeListViewYuki Anzai
 
Head First XML Layout on Android
Head First XML Layout on AndroidHead First XML Layout on Android
Head First XML Layout on AndroidYuki Anzai
 
Life with Android - Docomo SmartPhone Lounge Event -
Life with Android - Docomo SmartPhone Lounge Event -Life with Android - Docomo SmartPhone Lounge Event -
Life with Android - Docomo SmartPhone Lounge Event -Yuki Anzai
 

Plus de Yuki Anzai (15)

Watch face アプリを公開してみた
Watch face アプリを公開してみたWatch face アプリを公開してみた
Watch face アプリを公開してみた
 
"あんざいゆき" x "秋葉ちひろ" はカンファレンスアプリをどう作るのか?
"あんざいゆき" x "秋葉ちひろ" はカンファレンスアプリをどう作るのか?"あんざいゆき" x "秋葉ちひろ" はカンファレンスアプリをどう作るのか?
"あんざいゆき" x "秋葉ちひろ" はカンファレンスアプリをどう作るのか?
 
Android Pattern Cookbook で見るトレンドの変遷
Android Pattern Cookbook で見るトレンドの変遷Android Pattern Cookbook で見るトレンドの変遷
Android Pattern Cookbook で見るトレンドの変遷
 
Sublime Text 2 で始める ReVIEW
Sublime Text 2 で始める ReVIEWSublime Text 2 で始める ReVIEW
Sublime Text 2 で始める ReVIEW
 
ABC2013 Autumn あんざいゆき x 小太刀御禄 対談
ABC2013 Autumn あんざいゆき x 小太刀御禄 対談ABC2013 Autumn あんざいゆき x 小太刀御禄 対談
ABC2013 Autumn あんざいゆき x 小太刀御禄 対談
 
マルチスクリーン対応と最近のアプリの傾向
マルチスクリーン対応と最近のアプリの傾向マルチスクリーン対応と最近のアプリの傾向
マルチスクリーン対応と最近のアプリの傾向
 
アプリのUIを改善するための7ステップ ∼Bump Recorder の UI を設計してみたよ編∼
アプリのUIを改善するための7ステップ ∼Bump Recorder の UI を設計してみたよ編∼ アプリのUIを改善するための7ステップ ∼Bump Recorder の UI を設計してみたよ編∼
アプリのUIを改善するための7ステップ ∼Bump Recorder の UI を設計してみたよ編∼
 
Fragment を使ってみよう
Fragment を使ってみようFragment を使ってみよう
Fragment を使ってみよう
 
Android Layout Cookbook Seminor
Android Layout Cookbook SeminorAndroid Layout Cookbook Seminor
Android Layout Cookbook Seminor
 
ボクの開発スタイル
ボクの開発スタイルボクの開発スタイル
ボクの開発スタイル
 
Android Layout 3分クッキング
Android Layout 3分クッキングAndroid Layout 3分クッキング
Android Layout 3分クッキング
 
application Next Generation presented by android女子部
application Next Generation presented by android女子部application Next Generation presented by android女子部
application Next Generation presented by android女子部
 
Adapter & ListView & ExpandalbeListView
Adapter & ListView & ExpandalbeListViewAdapter & ListView & ExpandalbeListView
Adapter & ListView & ExpandalbeListView
 
Head First XML Layout on Android
Head First XML Layout on AndroidHead First XML Layout on Android
Head First XML Layout on Android
 
Life with Android - Docomo SmartPhone Lounge Event -
Life with Android - Docomo SmartPhone Lounge Event -Life with Android - Docomo SmartPhone Lounge Event -
Life with Android - Docomo SmartPhone Lounge Event -
 

Master of RecyclerView