RecyclerView是一个官方介绍RecyclerView为在有限的窗口展现大量数据的控件。拥有类似功能的控件有ListView、GridView的控件,是support:recyclerview-v7中提供的控件。
RecyclerView的使用就不说了,说说RecyclerView中的item的点击事件怎么搞?
做法是在适配器中实现,并封装方法暴露给外部调用
1.新建一个接口,用接口回调的方法实现item的点击事件处理
public interface OnItemClickListener {
public void onItemClick(View view, int postion);
}
2.外部声明我们的定义的接口
private OnItemClickListener mClickListener;//自定义的接口
3.在Adapter中的onCreateViewHolder()方法中返回ViewHolder的同时,返回一个OnItemClickListener
/*在这里对item进行绑定,并用View对象去接收它并作为返回*/
@Override
public CityAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.location_city_option_item, parent, false);
return new ViewHolder(view, mClickListener);
}
4.在标准化的ViewHolder内部类中做自定义接口的声明,对item设置监听事件
/*在ViewHolder中定义对象并通过findviewbyid()实例化绑定控件*/
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
TextView cityName;
private OnItemClickListener mListener;// 声明自定义监听接口
/*构造函数中添加自定义的接口的参数*/
public ViewHolder(View itemView, OnItemClickListener listener) {
super(itemView);
mListener = listener;
itemView.setOnClickListener(this); // 为ItemView添加点击事件
cityName = itemView.findViewById(R.id.city_option_tv);
}
@Override
public void onClick(View v) {
mListener.onItemClick(v, getLayoutPosition());
}
}
值得注意的是getPosition()被废弃后,官方提供了两个新的方法
// getpostion(已经废弃)为Viewholder自带的一个方法,用来获取RecyclerView当前的位置,将此作为参数,传出去 //getAdapterPosition 返回数据在Adapter中的位置(也许位置的变化还未来得及刷新到布局中),当使用Adapter的时候考虑使用 //getLayoutPosition 返回布局中最新的计算位置,和用户所见到的位置一致,当做用户输入(例如点击事件)的时候考虑使用
5.定义方法,给外部调用
/*item的点击事件处理,这里采用了接口回调的方法实现*/
/*将该方法暴露给外部,便于外部调用*/
public void setOnItemClickListener(OnItemClickListener listener) {
this.mClickListener = listener;
}
6.外部如何调用
/*RecyclerView的相关配置*/
RecyclerView recyclerView = view.findViewById(R.id.recyler_view_garage);
layoutManager = new LinearLayoutManager(getContext());
recyclerView.setLayoutManager(layoutManager);
GarageAdapter adapter = new GarageAdapter(getContext(),garageList);
recyclerView.setAdapter(adapter);
//这里是item的点击事件
adapter.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(View view, int postion) {
ToastUtil.showMessage(getContext(),"你点击了"+postion);
}
});
以上就是实现点击事件的方法,这是我的新手学习记录,希望多多指教