アプリ作って海外移住

コピペプログラマーのメモ

rycycleview click and itemclick

RecyclerView とは

Android ではデータコレクション表現のために ListView と Adapter が用意されています。 Adapter がデータソースを管理し、ListView は View の表示と、View の再利用を管理します。

RecyclerView はこの ListView と Adapter で実現していたものを、さらに細分化することで表示をカスタマイズできるようになっています。

RecyclerView は次のクラスと連携します。

RecyclerView

ViewGroup として、画面に表示される View の親となります。 ただし、レイアウトや View の再利用は別のクラスに任せており、 RecyclerView はそれらのクラスを保持し、処理を移譲しています。

RecyclerView.Adapter

Adapter クラスです。データソースを管理します。 View の生成とデータの反映も担当します。

RecyclerView.Recycler

Recycler クラスは、View の再利用性を管理します。 RecyclerView から削除された View は Recycler が再利用のために保持します。

RecyclerView.ViewHolder

ViewHolder クラスは、再利用される View を内包します。 View の再利用時の無駄な計算を省いて処理を高速化するために使われます。

RecyclerView.LayoutManager

LayoutManager クラスは、RecyclerView のレイアウトを決定します。 View の初期配置と、スクロール時の View の移動は LayoutManager が担当しています。

RecyclerView.ItemDecoration

アイテムに対する装飾を担当します。 View のまわりに線を引いたり、枠を付けるような処理を独立して実装できるようになります。

RecyclerView.SmoothScroller

スムーズスクロール処理を実装します。 レイアウトを独自実装していると、スクロール量の算出も独自に実装が必要となるため、 必要に応じて SmoothScroller を実装します。

これらのクラスはそれぞれがほとんど独立しています。 つまり、同じデータを保持 (Adapter) していながら、レイアウト (LayoutManager) だけを変更することもできますし、 アイテムの表示をカスタマイズ (ItemDecoration) することもできます。

ListView では View そのものがリスト表示処理を担っていたため、レイアウトもスクロール処理もカスタマイズすることができませんでした。RecyclerView では自由に実装することが可能となります。

 

 

 

 

 

 

 

 

 

 

 

 

private static final class RecyclerAdapter
extends RecyclerView.Adapter {

private final Context mContext;
private List mItemList = new ArrayList();

private RecyclerAdapter(final Context context, final List itemList) {
mContext = context;
mItemList = itemList;
}

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
final View view = LayoutInflater.from(mContext).inflate(R.layout.item, parent, false);
return new ViewHolder(view);
}

@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
final TextView textItem = (TextView) holder.itemView.findViewById(R.id.item_name);
textItem.setText(mItemList.get(position) + "");

final TextView tv2 = (TextView) holder.itemView.findViewById(R.id.tv2);
tv2.setText("jjjjjjjjjjjjjjjjjjppppppppppppppppppp");
}

@Override
public int getItemCount() {
return mItemList.size();
}

private static class ViewHolder extends RecyclerView.ViewHolder {
private final TextView mTextView;
private final TextView tv2;
private final ImageView iconView;
private ViewHolder(View itemLayoutView) {
super(itemLayoutView);
mTextView = (TextView) itemLayoutView.findViewById(R.id.item_name);
tv2 = (TextView) itemLayoutView.findViewById(R.id.tv2);
iconView = (ImageView) itemLayoutView.findViewById(R.id.item_icon);

//itemLayoutView.setOnClickListener(new View.OnClickListener() {          //click

iconView.setOnClickListener(new View.OnClickListener() {                       //item click
@Override
public void onClick(View v) {

String yyy = mTextView.getText().toString();
Toast.makeText(v.getContext(), "os version is: " +yyy, Toast.LENGTH_SHORT).show();
}
});

}

}

}