zoukankan      html  css  js  c++  java
  • recyclerview item点击事件

    recyclerview早就不陌生了,比起过去传统的listView,样式更多,也较为高效一点,这里整理一下recylerview中item的点击事件。

     

    recyclerview和listView不同的地方,在于RecyclerView不再负责Item视图的布局及显示,所以RecyclerView也没有为Item开放OnItemClick等点击事件,那么要想实现点击或是长按事件,就需要开发者自己来实现。

     

    这里实现的方式也是网上大部分的实现方式,很方便:在ViewHolder中实现点击监听,而具体的点击处理事件有Adapter在绑定viewholder时传入,同时,在Adapter中暴露方法,可以在使用Adapter的地方,传入实例化的点击事件。这样,就需要新建一个借口,所有自定义的点击事件都继承该借口。具体流程如下:

    (不擅于画图,凑合看吧)

    那么具体的实现如下:

    1、定义接口:

    public interface MyItemOnClickListener {
        public void onItemOnClick(View view,int postion);
    }

    在接口中,定义接口方法onItemOnClick方法,在里面实现具体的点击响应事件,同时传入两个参数:view和postion。和ListView中item的点击一样。

    2、在ViewHolder中实现单击监听:

     class FMListHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
    
            TextView textView;
    
            MyItemOnClickListener mListener;
            public FMListHolder(View itemView,MyItemOnClickListener myItemOnClickListener) {
                super(itemView);
                textView= (TextView) itemView.findViewById(R.id.id_item_text);
                this.mListener=myItemOnClickListener;
    
                itemView.setOnClickListener(this);
            }
    
    
            @Override
            public void onClick(View view) {
                if(mListener!=null){
                    mListener.onItemOnClick(view,getPosition());
                }
            }
        }

    上面的代码就是ViewHolder,在itemView或是里面包含的子View实现setOnClickListener,在OnClick中接受接口实例化传入的具体处理事件,即mListener。在这里也能看的出来,只有viewholder中可以实现点击监听。

    3、在Adapter中绑定ViewHolder时传入接口实例化后的类

    @Override
        public FMListAdapter.FMListHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            FMListHolder fmListHolder=
                    new FMListHolder(LayoutInflater.from(mContext).inflate(R.layout.item_fm_list,parent,false)
                    ,mMyItemOnClickListener);
            return fmListHolder;
        }

    看的出,在新建ViewHoler的过程中,传入了参数 mMyItemOnClickListener,该参数肯定在实现Adapter的地方传入Adapter中,所以要在Adapter中对外暴露方法:

    public void setItemOnClickListener(MyItemOnClickListener listener){
            mMyItemOnClickListener=listener;
        }

    4、在实现Adapter的地方实现具体点击事件

    mAdapter.setItemOnClickListener(new MyItemOnClickListener() {
                @Override
                public void onItemOnClick(View view, int postion) {
                    Log.e(TAG,postion+"");
                }
            });
    

    其实就是在使用RecyerView的地方,调用Adapter暴露的方法,将MyItemOnClickListener实例化话,并在方法onItemOnClick中实现事件,这里只是打印Log。

    这个博客很基础,就不粘贴全部的代码了。不懂的可以留言给我。


     

    不是闷骚的程序员算不上程序员。我的微信公众号“那点鼻事”,在这里周一到周五每天一篇文章,与技术无关,只哈牛逼。

     

  • 相关阅读:
    61031145 ERROR
    插入IO寄存器和位置约束---lattice&diamond
    lattice简单时序报告---timing report
    自动化仿真模型的搭建---基于lattice DO文件和modelsim脚本
    IIC加载以及存在的问题---lattice XO3
    DUALBOOT(双启动) 调试
    jtag管脚复用---lattice LCMXO3
    flask学习笔记-10:留言板(三)
    #flask学习笔记-09:留言板(二)
    #flask学习笔记-08:留言板(一)
  • 原文地址:https://www.cnblogs.com/YaoJianXun/p/6410350.html
Copyright © 2011-2022 走看看