Android 为Recyclerview添加滚动监听事件,以及为它每一个item设置点击监听事件

来源:互联网 发布:数据人生txt全集下载 编辑:程序博客网 时间:2024/06/05 09:34

虽然recyclerview为 整个recyclerview设置了一些监听事件,但是没有自带为其中的item设置点击事件

本文将提供一种recyclerview中item的点击监听事件的实现方法
先看看效果图:
这里写图片描述

第一,你需要一个接口

public interface OnItemClickListener {        void OnItemclick(View view,int position);}

第二,再适配器中 声明一个该接口的引用

public class Adapter extends RecyclerView.Adapter<ViewHolderr> {    private LayoutInflater layoutInflater;    private Context context;    private String[] datas;    private OnItemClickListener onItemClickListener;//声明一个接口的引用    public Adapter(Context context, String[] datas) {//构造函数传入Context对象和数据源        this.layoutInflater=LayoutInflater.from(context);        this.context = context;        this.datas = datas;    }    @Override    public ViewHolderr onCreateViewHolder(ViewGroup parent, int viewType) {        View view=layoutInflater.inflate(R.layout.item,parent,false);        ViewHolderr viewHolderr=new ViewHolderr(view);        return viewHolderr;    }    @Override    public void onBindViewHolder(final ViewHolderr holder, int position) {        holder.getButton().setText(datas[position]);        //在该函数中为recyclerview的视图绑定监听事件        if (onItemClickListener != null) {            holder.getButton().setOnClickListener(new View.OnClickListener() {                @Override                public void onClick(View view) {                  onItemClickListener.OnItemclick(holder.itemView, holder.getLayoutPosition());                }            });        }    }    @Override    public int getItemCount() {        return datas.length;    }    public  void setOnItemClickListner(OnItemClickListener onItemClickListner){        this.onItemClickListener=onItemClickListner;    }}

第三,就是在Mainactivity中给recyclerview设置监听事件了:

protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        ButterKnife.bind(this);        final LinearLayoutManager linearLayoutManager=new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false);        recyclerview.setLayoutManager(linearLayoutManager);        Adapter adapterr=new Adapter(this,datas);        adapterr.setOnItemClickListner(new OnItemClickListener() {            @Override            public void OnItemclick(View view, int position) {                Toast.makeText(MainActivity.this,  datas[position], Toast.LENGTH_SHORT).show();            }        });        recyclerview.setAdapter(adapterr);        recyclerview.setHasFixedSize(true);        recyclerview.setItemAnimator(new DefaultItemAnimator());    }

以下是对整个recycler的监听事件(来自https://developer.android.com/)

 recyclerview.addOnScrollListener(new RecyclerView.OnScrollListener() {            //返回当前recyclerview的可见的item数目,也就是datas.length            //dx是水平滚动的距离,dy是垂直滚动距离,向上滚动的时候为正,向下滚动的时候为负            @Override            public void onScrolled(RecyclerView recyclerView, int dx, int dy) {                super.onScrolled(recyclerView, dx, dy);                int firstVisibleItemPosition=linearLayoutManager.findFirstVisibleItemPosition();//可见范围内的第一项的位置                int lastVisibleItemPosition=linearLayoutManager.findLastVisibleItemPosition();//可见范围内的最后一项的位置                int itemCount=linearLayoutManager.getItemCount();//recyclerview中的item的所有的数目                //System.out.println(linearLayoutManager.getItemCount());                System.err.println(dy);            }        });        recyclerview.addOnScrollListener(new RecyclerView.OnScrollListener() {            @Override            public void onScrollStateChanged(RecyclerView recyclerView, int newState) {                super.onScrollStateChanged(recyclerView, newState);                /*                new State                0(SCROLL_STATE_IDLE)表示recyclerview是不动的(The RecyclerView is not currently scrolling.)                1(SCROLL_STATE_DRAGGING)表示recyclerview正在被拖拽(The RecyclerView is currently being dragged by outside input such as user touch input.)                2(SCROLL_STATE_SETTLING)表示recyclerview正在惯性下滚动(The RecyclerView is currently animating to a final position while not under outside control.)                 */                switch(newState)                {                    case 0:                        System.out.println("recyclerview已经停止滚动");                        break;                    case 1:                        System.out.println("recyclerview正在被拖拽");                        break;                    case 2:                        System.out.println("recyclerview正在依靠惯性滚动");                        break;                }            }        });

Demo源码已经上传到github.com,需要的朋友请戳https://github.com/Gpwner/Recyclerview/tree/master

0 0
原创粉丝点击