SlideShare a Scribd company logo
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
Master of RecyclerView
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
Master of RecyclerView
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
Master of RecyclerView
StaggeredGridLayoutManager
• 設定項目
• spanCount
• orientation
• reverseLayout
Master of RecyclerView
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);
Master of RecyclerView
アイテム用の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);
Master of RecyclerView
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を描画
Master of RecyclerView
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/

More Related Content

What's hot (20)

関数型プログラミングのデザインパターンひとめぐり
関数型プログラミングのデザインパターンひとめぐり関数型プログラミングのデザインパターンひとめぐり
関数型プログラミングのデザインパターンひとめぐり
Kazuyuki TAKASE
 
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
NTT DATA Technology & Innovation
 
Azure Digital TwinとUnreal Engineを統合するADTLink Pluginについて
 Azure Digital TwinとUnreal Engineを統合するADTLink Pluginについて Azure Digital TwinとUnreal Engineを統合するADTLink Pluginについて
Azure Digital TwinとUnreal Engineを統合するADTLink Pluginについて
Takahiro Miyaura
 
組織にアジャイルの構造を作る
組織にアジャイルの構造を作る組織にアジャイルの構造を作る
組織にアジャイルの構造を作る
toshihiro ichitani
 
技術系文書作成のコツ
技術系文書作成のコツ技術系文書作成のコツ
技術系文書作成のコツ
Hideo Terada
 
統合ID管理入門
統合ID管理入門統合ID管理入門
統合ID管理入門
山田(YAMADA) 達司(Tatsushi)
 
2019年度 若手技術者向け講座 オブジェクト指向
2019年度 若手技術者向け講座 オブジェクト指向2019年度 若手技術者向け講座 オブジェクト指向
2019年度 若手技術者向け講座 オブジェクト指向
keki3
 
Flutter移行の苦労と、乗り越えた先に得られたもの
Flutter移行の苦労と、乗り越えた先に得られたものFlutter移行の苦労と、乗り越えた先に得られたもの
Flutter移行の苦労と、乗り越えた先に得られたもの
Recruit Lifestyle Co., Ltd.
 
GitHub入門 手順編
GitHub入門 手順編GitHub入門 手順編
GitHub入門 手順編
hideaki honda
 
3週連続DDDその2 深いモデルの探求(ドメイン駆動設計 第3部)
3週連続DDDその2  深いモデルの探求(ドメイン駆動設計 第3部)3週連続DDDその2  深いモデルの探求(ドメイン駆動設計 第3部)
3週連続DDDその2 深いモデルの探求(ドメイン駆動設計 第3部)
増田 亨
 
iOS/Androidアプリエンジニアが理解すべき「Model」の振る舞い
iOS/Androidアプリエンジニアが理解すべき「Model」の振る舞いiOS/Androidアプリエンジニアが理解すべき「Model」の振る舞い
iOS/Androidアプリエンジニアが理解すべき「Model」の振る舞い
Ken Morishita
 
オブジェクト指向プログラミングの現在・過去・未来
オブジェクト指向プログラミングの現在・過去・未来オブジェクト指向プログラミングの現在・過去・未来
オブジェクト指向プログラミングの現在・過去・未来
増田 亨
 
マクロでBASEを操作しよう BASE Let's operate with macros
 マクロでBASEを操作しよう  BASE Let's operate with macros マクロでBASEを操作しよう  BASE Let's operate with macros
マクロでBASEを操作しよう BASE Let's operate with macros
koutarou watanabe
 
データモデリング入門-astah*を使って、TMの手法を使う-
データモデリング入門-astah*を使って、TMの手法を使う-データモデリング入門-astah*を使って、TMの手法を使う-
データモデリング入門-astah*を使って、TMの手法を使う-
Koichi Inami
 
ネットワーク基礎 - WEBページが表示されるまで
ネットワーク基礎 - WEBページが表示されるまでネットワーク基礎 - WEBページが表示されるまで
ネットワーク基礎 - WEBページが表示されるまで
Shinnosuke Tokuda
 
意見が出ない振り返りからチームを自己組織化に近づけたふりかえり改善事例 #agilejapan
意見が出ない振り返りからチームを自己組織化に近づけたふりかえり改善事例 #agilejapan意見が出ない振り返りからチームを自己組織化に近づけたふりかえり改善事例 #agilejapan
意見が出ない振り返りからチームを自己組織化に近づけたふりかえり改善事例 #agilejapan
Yahoo!デベロッパーネットワーク
 
ゼロからはじめるプロダクトマネージャー生活
ゼロからはじめるプロダクトマネージャー生活ゼロからはじめるプロダクトマネージャー生活
ゼロからはじめるプロダクトマネージャー生活
Takaaki Umada
 
コンピュテーション式ハンズオン
コンピュテーション式ハンズオンコンピュテーション式ハンズオン
コンピュテーション式ハンズオン
ssuserb6e6d5
 
運用してわかったLookerの本質的メリット : Data Engineering Study #8
運用してわかったLookerの本質的メリット : Data Engineering Study #8運用してわかったLookerの本質的メリット : Data Engineering Study #8
運用してわかったLookerの本質的メリット : Data Engineering Study #8
Masatoshi Abe
 
2016年度新卒採用向けsinops説明資料
2016年度新卒採用向けsinops説明資料2016年度新卒採用向けsinops説明資料
2016年度新卒採用向けsinops説明資料
Kotaro Shimai
 
関数型プログラミングのデザインパターンひとめぐり
関数型プログラミングのデザインパターンひとめぐり関数型プログラミングのデザインパターンひとめぐり
関数型プログラミングのデザインパターンひとめぐり
Kazuyuki TAKASE
 
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
NTT DATA Technology & Innovation
 
Azure Digital TwinとUnreal Engineを統合するADTLink Pluginについて
 Azure Digital TwinとUnreal Engineを統合するADTLink Pluginについて Azure Digital TwinとUnreal Engineを統合するADTLink Pluginについて
Azure Digital TwinとUnreal Engineを統合するADTLink Pluginについて
Takahiro Miyaura
 
組織にアジャイルの構造を作る
組織にアジャイルの構造を作る組織にアジャイルの構造を作る
組織にアジャイルの構造を作る
toshihiro ichitani
 
技術系文書作成のコツ
技術系文書作成のコツ技術系文書作成のコツ
技術系文書作成のコツ
Hideo Terada
 
2019年度 若手技術者向け講座 オブジェクト指向
2019年度 若手技術者向け講座 オブジェクト指向2019年度 若手技術者向け講座 オブジェクト指向
2019年度 若手技術者向け講座 オブジェクト指向
keki3
 
Flutter移行の苦労と、乗り越えた先に得られたもの
Flutter移行の苦労と、乗り越えた先に得られたものFlutter移行の苦労と、乗り越えた先に得られたもの
Flutter移行の苦労と、乗り越えた先に得られたもの
Recruit Lifestyle Co., Ltd.
 
GitHub入門 手順編
GitHub入門 手順編GitHub入門 手順編
GitHub入門 手順編
hideaki honda
 
3週連続DDDその2 深いモデルの探求(ドメイン駆動設計 第3部)
3週連続DDDその2  深いモデルの探求(ドメイン駆動設計 第3部)3週連続DDDその2  深いモデルの探求(ドメイン駆動設計 第3部)
3週連続DDDその2 深いモデルの探求(ドメイン駆動設計 第3部)
増田 亨
 
iOS/Androidアプリエンジニアが理解すべき「Model」の振る舞い
iOS/Androidアプリエンジニアが理解すべき「Model」の振る舞いiOS/Androidアプリエンジニアが理解すべき「Model」の振る舞い
iOS/Androidアプリエンジニアが理解すべき「Model」の振る舞い
Ken Morishita
 
オブジェクト指向プログラミングの現在・過去・未来
オブジェクト指向プログラミングの現在・過去・未来オブジェクト指向プログラミングの現在・過去・未来
オブジェクト指向プログラミングの現在・過去・未来
増田 亨
 
マクロでBASEを操作しよう BASE Let's operate with macros
 マクロでBASEを操作しよう  BASE Let's operate with macros マクロでBASEを操作しよう  BASE Let's operate with macros
マクロでBASEを操作しよう BASE Let's operate with macros
koutarou watanabe
 
データモデリング入門-astah*を使って、TMの手法を使う-
データモデリング入門-astah*を使って、TMの手法を使う-データモデリング入門-astah*を使って、TMの手法を使う-
データモデリング入門-astah*を使って、TMの手法を使う-
Koichi Inami
 
ネットワーク基礎 - WEBページが表示されるまで
ネットワーク基礎 - WEBページが表示されるまでネットワーク基礎 - WEBページが表示されるまで
ネットワーク基礎 - WEBページが表示されるまで
Shinnosuke Tokuda
 
意見が出ない振り返りからチームを自己組織化に近づけたふりかえり改善事例 #agilejapan
意見が出ない振り返りからチームを自己組織化に近づけたふりかえり改善事例 #agilejapan意見が出ない振り返りからチームを自己組織化に近づけたふりかえり改善事例 #agilejapan
意見が出ない振り返りからチームを自己組織化に近づけたふりかえり改善事例 #agilejapan
Yahoo!デベロッパーネットワーク
 
ゼロからはじめるプロダクトマネージャー生活
ゼロからはじめるプロダクトマネージャー生活ゼロからはじめるプロダクトマネージャー生活
ゼロからはじめるプロダクトマネージャー生活
Takaaki Umada
 
コンピュテーション式ハンズオン
コンピュテーション式ハンズオンコンピュテーション式ハンズオン
コンピュテーション式ハンズオン
ssuserb6e6d5
 
運用してわかったLookerの本質的メリット : Data Engineering Study #8
運用してわかったLookerの本質的メリット : Data Engineering Study #8運用してわかったLookerの本質的メリット : Data Engineering Study #8
運用してわかったLookerの本質的メリット : Data Engineering Study #8
Masatoshi Abe
 
2016年度新卒採用向けsinops説明資料
2016年度新卒採用向けsinops説明資料2016年度新卒採用向けsinops説明資料
2016年度新卒採用向けsinops説明資料
Kotaro Shimai
 

Viewers also liked (20)

Mastering RecyclerView Layouts
Mastering RecyclerView LayoutsMastering RecyclerView Layouts
Mastering RecyclerView Layouts
Dave Smith
 
droidgirls Recyclerview
droidgirls Recyclerviewdroidgirls Recyclerview
droidgirls Recyclerview
Yuki Anzai
 
Androidオールスターズ2016 yanzm
Androidオールスターズ2016 yanzmAndroidオールスターズ2016 yanzm
Androidオールスターズ2016 yanzm
Yuki Anzai
 
Fun with RecyclerView
Fun with RecyclerViewFun with RecyclerView
Fun with RecyclerView
GlobalLogic Ukraine
 
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
Yuki 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-Ons
Dave 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 Fukuoka
Yuki 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 2016
Yuki Anzai
 
The Tale of a Smooth RecyclerView
The Tale of a Smooth RecyclerViewThe Tale of a Smooth RecyclerView
The Tale of a Smooth RecyclerView
Simek 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 tips
Nexus FrontierTech
 
Recyclerview in action
Recyclerview in action Recyclerview in action
Recyclerview in action
Pratama Nur Wijaya
 
Bonnes pratiques développement android
Bonnes pratiques développement androidBonnes pratiques développement android
Bonnes pratiques développement android
Daniel Rene FOUOMENE PEWO
 
ExtraLayoutSpace of RecyclerView
ExtraLayoutSpace of RecyclerViewExtraLayoutSpace of RecyclerView
ExtraLayoutSpace of RecyclerView
Mima Yuki
 
Android 02 - Recycler View Adapter
Android 02 - Recycler View AdapterAndroid 02 - Recycler View Adapter
Android 02 - Recycler View Adapter
Aline 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 apps
Noé Breiss
 
Mastering RecyclerView Layouts
Mastering RecyclerView LayoutsMastering RecyclerView Layouts
Mastering RecyclerView Layouts
Dave Smith
 
droidgirls Recyclerview
droidgirls Recyclerviewdroidgirls Recyclerview
droidgirls Recyclerview
Yuki Anzai
 
Androidオールスターズ2016 yanzm
Androidオールスターズ2016 yanzmAndroidオールスターズ2016 yanzm
Androidオールスターズ2016 yanzm
Yuki 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 Fukuoka
Yuki 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-Ons
Dave 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 Fukuoka
Yuki 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 2016
Yuki Anzai
 
The Tale of a Smooth RecyclerView
The Tale of a Smooth RecyclerViewThe Tale of a Smooth RecyclerView
The Tale of a Smooth RecyclerView
Simek 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 tips
Nexus FrontierTech
 
ExtraLayoutSpace of RecyclerView
ExtraLayoutSpace of RecyclerViewExtraLayoutSpace of RecyclerView
ExtraLayoutSpace of RecyclerView
Mima Yuki
 
Android 02 - Recycler View Adapter
Android 02 - Recycler View AdapterAndroid 02 - Recycler View Adapter
Android 02 - Recycler View Adapter
Aline 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 apps
Noé Breiss
 

Similar to Master of RecyclerView (20)

初心者〜中級者 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
 
Blocksの活用法
Blocksの活用法Blocksの活用法
Blocksの活用法
Hidetoshi Mori
 
Swiftyを試す
Swiftyを試すSwiftyを試す
Swiftyを試す
幸雄 村上
 
Android Architecture Componentsの新機能
Android Architecture Componentsの新機能Android Architecture Componentsの新機能
Android Architecture Componentsの新機能
Damper Matsu
 
アップルのテンプレートは有害と考えられる
アップルのテンプレートは有害と考えられるアップルのテンプレートは有害と考えられる
アップルのテンプレートは有害と考えられる
Brian Gesiak
 
IgGrid 入門編
IgGrid 入門編IgGrid 入門編
IgGrid 入門編
Daizen Ikehara
 
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
 
jQuery超入門編
jQuery超入門編jQuery超入門編
jQuery超入門編
Yasuhito Yabe
 
.NETからActive Directoryデータにアクセス ~グループ情報の取得と表示~
.NETからActive Directoryデータにアクセス ~グループ情報の取得と表示~.NETからActive Directoryデータにアクセス ~グループ情報の取得と表示~
.NETからActive Directoryデータにアクセス ~グループ情報の取得と表示~
Michio Koyama
 
Jetpack Workshop
Jetpack WorkshopJetpack Workshop
Jetpack Workshop
Hideaki Miyake
 
Entity Framework
Entity FrameworkEntity Framework
Entity Framework
Nakashima Yujiro
 
.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 scala
Satoshi 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 3
Hikawa Kilica
 
Active Directoryデータの "大きい整数"
Active Directoryデータの "大きい整数"Active Directoryデータの "大きい整数"
Active Directoryデータの "大きい整数"
Michio Koyama
 
初心者〜中級者 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 scala
Satoshi 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 3
Hikawa Kilica
 
Active Directoryデータの "大きい整数"
Active Directoryデータの "大きい整数"Active Directoryデータの "大きい整数"
Active Directoryデータの "大きい整数"
Michio Koyama
 

More from Yuki Anzai (15)

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 で始める ReVIEW
Yuki 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 Seminor
Yuki 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 & ExpandalbeListView
Yuki Anzai
 
Head First XML Layout on Android
Head First XML Layout on AndroidHead First XML Layout on Android
Head First XML Layout on Android
Yuki 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
 
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 で始める ReVIEW
Yuki 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 Seminor
Yuki 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 & ExpandalbeListView
Yuki Anzai
 
Head First XML Layout on Android
Head First XML Layout on AndroidHead First XML Layout on Android
Head First XML Layout on Android
Yuki 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
 

Master of RecyclerView