Android的新特性RecycleView

来源:互联网 发布:11登陆不上 网络异常 编辑:程序博客网 时间:2024/05/22 18:06

RecycleView
1.RecyclerView是什么?
RecylerView:是support-v7包中的新组件,是一个强大的滑动组件,与经典的ListView相比,同样拥
有 item回收复用的功能,这一点从它的名字recylerview即回收view也可以看出。
2.RecyclerView的优点是什么?
根据官方的介绍RecylerView是ListView的升级版,既然如此那RecylerView必然有它的优点,现就
RecylerView相对于ListView的优点罗列如下:
①RecylerView封装了viewholder的回收复用,也就是说RecylerView标准化了ViewHolder,编写
Adapter 面向的是ViewHolder而不再是View了,复用的 逻辑被封装了,写起来更加简单。
②提供了一种插拔式的体验,高度的解耦,异常的灵活,针对一个Item的显示RecylerView专门抽取出
以通过LinearLayoutManager这个类来进行控制(与GridView效果对应的是GridLayoutManager,与瀑
布流对应的还有StaggeredGridLayoutManager等),也就是说RecylerView不再拘泥于ListView的线
RecylerView的ItemDecoration这个类,然后针对自己的业务需求去抒写代码。
③可以控制Item增删的动画,可以通过ItemAnimator这个类进行控制,当然针对增删的动画,
RecylerView有其自己默认的实现。

3.使用步骤:  3.1导入recyclerView-v7包  3.2在布局文件中添加一个RecycleView
        <android.support.v7.widget.RecyclerView        android:id="@+id/recyclerView"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        />
  3.3创建一个布局文件用来给每一个Item布局  3.4声明数据并与布局文件中的控件进行绑定     声明RecycleView对象     private RecyclerView recyclerView;    声明数据集合    private List<Map<String, Object>> mList;  3.5设置布局管理器格式     线性布局管理器    recyclerView.setLayoutManager(new LinearLayoutManager(this));  3.6 创建适配器         同ListView一样,RecyclerView只负责显示,而组建数据的任务,我们也需要一个Adapter来完成。      MyAdapter adapter = new MyAdapter();     适配器与RecycleView进行绑定    recyclerView.setAdapter(adapter);           创建适配器 :**Adapter需要继承自RecyclerView.Adapter**           在这里我们可以给Adapter一个泛型,这个泛型指定了该Adapter           所使用的ViewHolder,如果不指定泛型,则默认是RecyclerView.ViewHolder,           即自定义ViewHolder的父类     class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHoler> {      重写3个方法         当需要拿到ViewHolder 的时候就会调用,返回值与之前的泛型相同,在加载不同类型的布局的时         候,可以根据ViewType来创建不同的ViewHolder         viewType是Item的数据类型    public MyViewHoler onCreateViewHolder(ViewGroup parent, int viewType) {    根据拿到的布局文件创建一个ViewHolder        View view =               LayoutInflater.from(MainActivity.this).inflate(R.layout.list_item, null);        MyViewHoler viewHoler = new MyViewHoler(view);        return viewHoler;    }      当内容和布局进行绑定的时候回调这个方法,每当有新数据进入屏幕的时候,也会回调这个方法      参数holder和ViewHolder类型与泛型所规定的类型相同,      参数position代表的是该item的位置可以通过position来获取相应的数据    public void onBindViewHolder(MyViewHoler holder, int position) {        从数据列表中获取数据        String text = mList.get(position).get("text").toString();        int image = (Integer) mList.get(position).get("image");        将数据设置到界面上        holder.textView.setText(text);        holder.imageView.setImageResource(image);    }    返回数据的个数    public int getItemCount() {        return mList.size();    }  3.7创建ViewHolder      与ListView的ViewHolder不同,RecyclerView的ViewHolder需要      继承自**RecyclerView.ViewHolder**
          class MyViewHoler extends RecyclerView.ViewHolder {            TextView textView;            ImageView imageView;            public MyViewHoler(View itemView) {                super(itemView);                  进行控件关联                textView = (TextView) itemView.findViewById(R.id.textView);                imageView = (ImageView) itemView.findViewById(R.id.imageView);            }         }
   **表格(GridLayoutManager)**   将线性布局管理器替换为表格布局管理器,就可以使用表格布局    recyclerView.setLayoutManager(new GridLayoutManager(this,3));   第一个参数:上下文   第二个参数:列数    GridLayoutManager(Context context, int spanCount, int orientation,        boolean reverseLayout)    第二个参数spanCount表示表格的行数或者列数;第三个参数表示是水平滑动或者是竖直方向滑动;    最后一 个参数表示是否从数据的尾部开始显示。   **瀑布流 (StaggeredGridLayoutManager)**   将线性布局管理器替换为瀑布流布局管理器,就可以使用瀑布流布局          recyclerView.setLayoutManager(new       StaggeredGridLayoutManager(3,StaggeredGridLayoutManager.VERTICAL));   第一个参数是行(或列的数目)    第二个参数是滚动方向,如果为横向滚动,则每一个item的行高固定    如果为纵向滚动,则每一个item的列宽固定
0 0