个人博客: chrongliu.cn
相关文章
RecyclerView —— RecyclerView 的基本使用
RecyclerView —— 为 RecyclerView 绘制分割线
RecyclerView —— 列表样式通用分割线
RecyclerView 是不支持点击事件的,所以需要我们自己手动去添加。
一、使用接口回调添加点击事件
我们首先要在 Adapter 中定义一个接口,然后利用接口回调的方法,将条目的位置回调出去。
/**
* 定义一个接口
*/
public interface ItemClickListener {
void onItemClick(int position);
}
public ItemClickListener mListener;
public void setOnItemClickListener(ItemClickListener listener) {
this.mListener = listener;
}
然后在 onBindViewHolder 方法中,绑定事情,将条目的位置回调出去。
@Override
public void onBindViewHolder(ViewHolder holder, final int position) {
holder.itemWord.setText(mDatas.get(position));
if (mListener != null) {
//绑定点击事件
holder.itemLinear.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//把条目的位置回调回去
mListener.onItemClick(position);
}
});
}
}
二、使用
在 Activity 中,通过我们定义好的 setOnItemClickListener 方法进行使用。
mUseAdapter.setOnItemClickListener(new BaseUseAdapter.ItemClickListener() {
@Override
public void onItemClick(int position) {
Toast.makeText(BaseUseActivity.this, "条目位置:" + position, Toast.LENGTH_SHORT).show();
}
});
三、Adapter 完整代码
public class BaseUseAdapter extends RecyclerView.Adapter<BaseUseAdapter.ViewHolder> {
private Context mContext;
private ArrayList<String> mDatas;
public BaseUseAdapter(Context context, ArrayList<String> datas) {
this.mContext = context;
this.mDatas = datas;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(mContext).inflate(R.layout.item_base_use, parent,
false);
ViewHolder viewholder = new ViewHolder(itemView);
return viewholder;
}
@Override
public void onBindViewHolder(ViewHolder holder, final int position) {
holder.itemWord.setText(mDatas.get(position));
if (mListener != null) {
//绑定点击事件
holder.itemLinear.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//把条目的位置回调回去
mListener.onItemClick(position);
}
});
}
}
@Override
public int getItemCount() {
return mDatas.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
public TextView itemWord;
private LinearLayout itemLinear;
public ViewHolder(View itemView) {
super(itemView);
itemWord = (TextView) itemView.findViewById(R.id.tv_word);
itemLinear = (LinearLayout) itemView.findViewById(R.id.linear_item);
}
}
/**
* 定义一个接口
*/
public interface ItemClickListener {
void onItemClick(int position);
}
public ItemClickListener mListener;
public void setOnItemClickListener(ItemClickListener listener) {
this.mListener = listener;
}
}
网友评论