认识RecyclerView

来源:互联网 发布:杀网络喷子的动漫 编辑:程序博客网 时间:2024/06/01 16:11

感觉最近需要很好的理解Google推出良久的控件,Google对其定位,我们暂且不谈,反正很是灵活和实用。粗浅认识,和ListView和GridView功能和原理“类似”。

java.lang.Object
↳ android.view.View
↳ android.view.ViewGroup
↳ android.support.v7.widget.RecyclerView

在使用RecyclerView的过程中,最明显与(ListView和GridView)的区别,是要设置布局管理器:

mRecyclerView.setLayoutManager(layoutManager);

目前可传入的参数有:

        LinearLayoutManager        StaggeredGridLayoutManager(瀑布流布局)        GridLayoutManager

接下来就是介绍它对应的适配器,基本流程
(当然网上大家都有自己的方法,不一定都是这么做,仅供参考~)

  • 基础适配器
  • 依据业务继承基类适配器并封装

简单讲就是继承RecyclerView.Adapter <自定义的ViewHolder>,再具体就是
RecyclerView的源码中有:

public static abstract class Adapter<VH extends ViewHolder>

里面有具体的抽象方法,也是我们开发中需要实现的方法:

public abstract VH onCreateViewHolder(ViewGroup parent, int viewType);public abstract void onBindViewHolder(VH holder, int position);public abstract int getItemCount();

如果不按以上方法写该控件适配器,你也可以参考一下以下代码,这是比较中规中矩的写法,当然了,我最早也是
按以下这种早期网络资料上很“成熟”方式写适配器的。(以下只是示例,具体写的话,依据业务具体对待~)

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder > {        private List <String> items;        public MyAdapter (@NonNull List<String> dateItems ) {            this.items = (dateItems != null ? dateItems : new ArrayList<String>());        }        @Override public MyViewHolder onCreateViewHolder (ViewGroup viewGroup, int viewType) {            View itemView = LayoutInflater.from( viewGroup.getContext  ()).inflate(R.layout .item,             viewGroup, false );            return new MyViewHolder(itemView);        }        @Override public void onBindViewHolder (MyViewHolder viewHolder, int position) {            viewHolder.textView .setText(items.get (position));        }        @Override public int getItemCount () {            return (this.items != null) ? this .items. size() : 0 ;        }        protected final static class MyViewHolder extends RecyclerView.ViewHolder {            protected TextView textView ;            public MyViewHolder (View itemView) {                super(itemView);                this.textView = (TextView) itemView.findViewById (R. id.text);            }        }    }
0 0