Android RecyclerView的使用

RecyclerView可以实现ListView和GridView的功能,但是有以下特点:

  1. 可以实现横向滚动,瀑布样式排列;
  2. 相较于ListView和GridView中需要手动复用convertView和ViewHolder,RecyclerView内部对对象的复用做了封装,只需要用就可以了;
  3. Adapter有一个notifyItemChanged()方法,可以对局部数据进行修改;
  4. 没有统一的Item点击、长按等的监听器,需要在itemView加载时单独设置。

用法

新建一个自己的适配器类,继承RecyclerView.Adapter类,该类拥有一个限定泛型,必须继承自Recycler.ViewHolder类。

    private static class RVAdapter extends RecyclerView.Adapter<RVAdapter.RVHolder>{
        private ArrayList<Item> data ;

        public RVAdapter(ArrayList<Item> data) {
            this.data = data;
        }

        @NonNull
        @Override
        public RVHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
            Log.d(TAG, "onCreateViewHolder: 创建了一个对象");
            View view = View.inflate(parent.getContext(),R.layout.onenumber_layout,null);
            TextView v1 = view.findViewById(R.id.tv);
            TextView v2 = view.findViewById(R.id.tv2);
            return new RVHolder(view,v1,v2);
        }

        @Override
        public void onBindViewHolder(@NonNull RVHolder holder, int position) {
            holder.itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Toast.makeText(context,position+"",Toast.LENGTH_SHORT).show();
                }
            });
            holder.t1.setText(data.get(position).id+"");
            holder.t2.setText(data.get(position).val);
        }

        @Override
        public int getItemCount() {
            return data.size();
        }

        private static class RVHolder extends RecyclerView.ViewHolder{
            TextView t1,t2;
            public RVHolder(@NonNull View itemView,TextView... textViews) {
                super(itemView);
                t1=textViews[0];
                t2=textViews[1];

            }

        }
    }

需要重写三个方法,分别是

  • getItemCount()获取item总数;
  • onCreateViewHolder() 创建View时调用,创建好View并放入ViewHolder中,返回这个ViewHolder;
  • onBindViewHolder() 复用View时调用,将View从ViewHolder中拿出,填充数据即可。

由于RecyclerView不像ListView那样有onItemClickListener(),如果需要为其设置点击事件,则需要在Adapter的onBindViewHolder()方法中,为这个ItemView设置点击事件(onClickListener)。

posted @ 2020-03-31 14:39  PraveZ  阅读(279)  评论(0编辑  收藏  举报