RecyclerView的BaseAdapter的用法与条目监听的书写

         Android api22之后,Google推出了很多新控件,其中recyclerview作为listview的替代控件而受到很多开发者的青睐。其最主要的原因就是RecyclerView应用起来更为方便,也更加的灵活。

       关于RecyclerView的使用,网上有很多相关的帖子,介绍的也很详细。在这里我就不在一一赘述了。这篇帖子,主要讲的是RecyclerView的BaseAdapter的使用,以及RecyclerView的条目监听事件的设置。

       相比较于ListView,RecyclerView无论从条目排列方式,还是从布局管理上都要优秀很多。但是不知道为什么,Google没有为RecyclerView设置提条目监听事件。所以,就需要开发者们自己去添加条目监听。这种情况下,就用到的BaseAdapter。

public class BaseRecyclerViewAdapter extends RecyclerView.Adapter<BaseRecyclerViewAdapter.BaseViewHolder> {

    protected LayoutInflater layoutInflater = null ;
    private Context context ;
    //创建接口对象
    private ICallBack onItemListener ;


    public BaseRecyclerViewAdapter(Context context, ICallBack callBack) {
        this.context = context;
        this.layoutInflater = LayoutInflater.from(context);
    }
    public BaseRecyclerViewAdapter(Context context) {
        this.context = context;
        this.layoutInflater = LayoutInflater.from(context);
    }

    /**
     * 初始化接口对象
     */
    public void setOnItemClickListener(ICallBack listener) {
        this.onItemListener = listener;
    }
    @Override
    public BaseViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        return null;
    }

    @Override
    public void onBindViewHolder(BaseViewHolder holder, int position) {

    }

    @Override
    public int getItemCount() {
        return 0;
    }

    protected class BaseViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{

        private int position ;
        public BaseViewHolder(View itemView ,Context context  ) {
            super(itemView);
            if (context instanceof ICallBack){
                onItemListener = (ICallBack) context;
            }
            itemView.setOnClickListener(this);
        }

        public void setPosition(int position) {
            this.position = position;
        }

        @Override
        public void onClick(View v) {
            if (onItemListener != null ){
                onItemListener.OnItemClickListener(v,  v.getTag() , position);
            }
        }
    }

    /***
     * 定义ICallBack接口,实现条目点击监听
     */
    public  interface ICallBack{
       void  OnItemClickListener(View v,  Object o , int position);
    }
}

在上述代码中,BaseAdapter类初始化了LayoutInflater;并且绑定了BaseViewHolder,而在BaseViewHolder中,通过

 itemView.setOnClickListener(this);

绑定了每个itemView的点击监听事件,当然,如果想要添加长按事件的话,只需要添加

 itemView.setOnLongClickListener(this);
并实现该接口中的方法就可以了。


其中在BaseViewHolder中,添加了

 public void setPosition(int position) {
            this.position = position;
        }
这个方法的作用在于,在BaseAdapter的子类中可以再onBindViewHolder(BaseViewHolderholder,int position)中通过holder.setPosition(position);的方式获取到条目的下标值。这样就可以区分不同条目的点击事件。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值