RecyclerViewを使っている方で、
RecyclerView内のアイテムに
onClickListenerを設定する方法を見つけた方はいらっしゃいますか? 各アイテムのレイアウトにリスナーを設定しようと思いましたが、それではちょっと手間がかかりすぎるように思います。 きっと
RecyclerViewが
onClick`イベントをリッスンする方法があると思うのですが、いまいちわかりませんでした。
APIが大幅に変更されたので、各アイテムにOnClickListener
を作成しても不思議ではありません。とはいえ、それほど手間ではありません。あなたのRecyclerView.Adapter<MyViewHolder>
の実装では、以下のようになっているはずです。
private final OnClickListener mOnClickListener = new MyOnClickListener();
@Override
public MyViewHolder onCreateViewHolder(final ViewGroup parent, final int viewType) {
View view = LayoutInflater.from(mContext).inflate(R.layout.myview, parent, false);
view.setOnClickListener(mOnClickListener);
return new MyViewHolder(view);
}
onClick`メソッドです。
@Override
public void onClick(final View view) {
int itemPosition = mRecyclerView.getChildLayoutPosition(view);
String item = mList.get(itemPosition);
Toast.makeText(mContext, item, Toast.LENGTH_LONG).show();
}
同様の question @CommonsWare'のコメントは、OnClickListener
インターフェースを`viewHolder
に実装したthisにリンクしていますので、チェックしてみてください。
ここでは、ViewHolder
の簡単な例をご紹介します。
TextView textView;//declare global with in adapter class
public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
private ViewHolder(View itemView) {
super(itemView);
itemView.setOnClickListener(this);
textView = (TextView)view.findViewById(android.R.id.text1);
}
@Override
public void onClick(View view) {
Toast.makeText(view.getContext(), "position = " + getLayoutPosition(), Toast.LENGTH_SHORT).show();
//go through each item if you have few items within recycler view
if(getLayoutPosition()==0){
//Do whatever you want here
}else if(getLayoutPosition()==1){
//Do whatever you want here
}else if(getLayoutPosition()==2){
}else if(getLayoutPosition()==3){
}else if(getLayoutPosition()==4){
}else if(getLayoutPosition()==5){
}
//or you can use For loop if you have long list of items. Use its length or size of the list as
for(int i = 0; i<exampleList.size(); i++){
}
}
}
そして、 ``Adapter
は次のようになります。
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view =LayoutInflater.from(parent.getContext()).inflate(android.R.layout.simple_list_item_1, parent, false);
return new ViewHolder(view);
}
これは私が最終的に必要としたもので、誰かの役に立つかもしれません。
public static class ViewHolder extends RecyclerView.ViewHolder {
public ViewHolder(View item) {
super(item);
item.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Log.d("RecyclerView", "onClick:" + getAdapterPosition());
}
});
}
}
ソース: http://blog.csdn.net/jwzhangjie/article/details/36868515