Android RecyclerView給Item新增點選事件
阿新 • • 發佈:2018-12-31
方法一、直接在Adapter中的onBindViewHolder()方法中實現點選事件
@Override
public void onBindViewHolder(MyViewHolder viewHolder, final int postion) {
viewHolder.textView.setText(mDatas.get(postion));
viewHolder.rootView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// 點選事件
Toast.makeText(mContext, postion + "", 1000).show();
}
});
}
方法二、
1、自定義一個介面。
public interface OnItemClickListener {
public void onItemClick(View view, int postion);
}
2、在自定義的ViewHolder中實現onClickListenr介面,先宣告一個自定義介面的變數,在自定義的ViewHolder的建構函式中新增一個引數-自定義的這個介面,並設定itemview的點選事件,在點選事件中轉移到自定義的介面上,傳到外面的呼叫者。
/**
* 自定義的ViewHolder繼承自android.support.v7.widget.RecyclerView.ViewHolder
*
* @author raphets
*
*/
public class MyViewHolder extends ViewHolder implements OnClickListener {
TextView textView;
private OnItemClickListener mListener;// 宣告自定義的介面
// 建構函式中新增自定義的介面的引數
public MyViewHolder(View itemView, OnItemClickListener listener) {
super (itemView);
mListener = listener;
// 為ItemView新增點選事件
itemView.setOnClickListener(this);
textView = (TextView) itemView.findViewById(R.id.textView);
}
@Override
public void onClick(View v) {
// getpostion()為Viewholder自帶的一個方法,用來獲取RecyclerView當前的位置,將此作為引數,傳出去
mListener.onItemClick(v, getPosition());
}
}
3、在自定義的Adapter中定義一個方法public void setOnItemClickListener(OnItemClickListener listener) {this.mClickListener = listener;}
並暴露給外面的呼叫者
MyRecylerViewAdapter
public class MyRecylerViewAdapter extends Adapter<MyViewHolder> {
private Context mContext;
private List<String> mDatas;
private OnItemClickListener mClickListener;
public MyRecylerViewAdapter(Context context, List<String> datas) {
this.mContext = context;
this.mDatas = datas;
}
@Override
public int getItemCount() {
return mDatas.size();
}
@Override
public void onBindViewHolder(MyViewHolder arg0, int arg1) {
final int pos = arg1;
arg0.textView.setText(mDatas.get(arg1));
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup arg0, int arg1) {
View view = LayoutInflater.from(mContext).inflate(R.layout.item, arg0, false);
MyViewHolder holder = new MyViewHolder(view,mClickListener);
return holder;
}
public void setOnItemClickListener(OnItemClickListener listener) {
this.mClickListener = listener;
}
}
4、在MainActivity中使用
adapter.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(View view, int postion) {
Toast.makeText(MainActivity.this, postion+"", 1000).show();
}
});