实现RecyclerView点击事件的探索-----微风android新手-------

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);
            }
        });

以上就是实现点击事件的方法,这是我的新手学习记录,希望多多指教

猜你喜欢

转载自blog.csdn.net/qq_40731414/article/details/81808563