Android 滑动列表之RecyclerView

RecyclerView是Android 5.0推出的新组件,它替代了ListView,提供了更强的灵活性和扩展性。RecyclerView通过设置LayoutManager能实现横向、竖向甚至瀑布流布局,自带viewholder的回收复用功能,降低了开发复杂度。它还支持自定义间隔样式、Item动画,能方便地实现上拉加载、下拉刷新、拖拽排序等功能,是Android开发中的重要组件。
摘要由CSDN通过智能技术生成

一、RecyclerView介绍

从Android 5.0开始,谷歌公司推出了一个用于大量数据展示的新控件RecylerView,可以用来代替传统的ListView,更加强大和灵活。

RecylerView在support-v7包中,是一个扩展性很强的滑动组件,也有回收复用功能。

RecylerView可以实现很多功能,例如,横向滚动,瀑布流等。

比如:有一个需求是屏幕竖着的时候的显示形式是ListView,屏幕横着的时候的显示形式是2列的GridView,此时如果用RecyclerView,则通过设置LayoutManager一行代码实现替换。

二、RecyclerView的优点

RecyclerView并不会完全替代ListView(这点从ListView没有被标记为@Deprecated可以看出),两者的使用场景不一样。但是RecyclerView的出现会让很多开源项目被废弃,例如横向滚动的ListView, 横向滚动的GridView, 瀑布流控件,因为RecyclerView能够实现所有这些功能。

比如:有一个需求是屏幕竖着的时候的显示形式是ListView,屏幕横着的时候的显示形式是2列的GridView,此时如果用RecyclerView,则通过设置LayoutManager一行代码实现替换。

RecylerView相对于ListView的优点罗列如下:

  1. RecyclerView封装了viewholder的回收复用,也就是说RecyclerView标准化了ViewHolder,编写Adapter面向的是ViewHolder而不再是View了,复用的逻辑被封装了,写起来更加简单。
  2. 直接省去了listview中convertView.setTag(holder)和convertView.getTag()这些繁琐的步骤。
  3. 提供了一种插拔式的体验,高度的解耦,异常的灵活,针对一个Item的显示RecyclerView专门抽取出了相应的类,来控制Item的显示,使其的扩展性非常强。
  4. 设置布局管理器以控制Item的布局方式,横向、竖向以及瀑布流方式
  5. 例如:你想控制横向或者纵向滑动列表效果可以通过LinearLayoutManager这个类来进行控制(与GridView效果对应的是GridLayoutManager,与瀑布流对应的还StaggeredGridLayoutManager等)。也就是说RecyclerView不再拘泥于ListView的线性展示方式,它也可以实现GridView的效果等多种效果。
  6. 可设置Item的间隔样式(可绘制)
  7. 通过继承RecyclerView的ItemDecoration这个类,然后针对自己的业务需求去书写代码。
  8. 可以控制Item增删的动画,可以通过ItemAnimator这个类进行控制,当然针对增删的动画,RecyclerView有其自己默认的实现。

但是关于Item的点击和长按事件,需要用户自己去实现。

 

三、RecyclerView功能

 

1、基本功能

(1)Layout Manager:Item的布局,可以自由的切换不同的布局。例如:使用线性布局管理器

 LinearLayoutManager manager=new LinearLayoutManager(this);
 manager.setOrientation(LinearLayoutManager.VERTICAL);
 recyclerView.setLayoutManager(manager);

RecyclerView提供了三种布局管理器:

LinerLayoutManager 以垂直或者水平列表方式展示Item

GridLayoutManager 以网格方式展示Item

StaggeredGridLayoutManager 以瀑布流方式展示Item

 

(2)Adapter:为Item提供数据。

class MyRecycleAdapter extends RecyclerView.Adapter{}

(3)Item Decoration:Item之间的Divider。

 recyclerView.setLayoutManager(manager);
//分割线,相当于ListView每个Item之间的线,其实无所谓,在定义Item布局时候自己可以定义
 recyclerView.addItemDecoration( new DividerItemDecoration(this,DividerItemDecoration.VERTICAL));

自己定义分割线需要继承RecyclerView.ItemDecoration 有如下方法:

onDraw(Canvas c, RecyclerView parent, State state),在Item绘制之前被调用,该方法主要用于绘制间隔样式。

onDrawOver(Canvas c, RecyclerView parent, State state),在Item绘制之前被调用,该方法主要用于绘制间隔样式。

getItemOffsets(Rect outRect, View view, RecyclerView parent, State state),设置item的偏移量,偏移的部分用于填充间隔样式,即设置分割线的宽、高;在RecyclerView的onMesure()中会调用该方法。

(4)Item Animator:添加、删除Item动画。

//设置添加、删除、移动、改变的动画。
recyclerView.setItemAnimator(new DefaultItemAnimator());

还可以做下面的事情

  • 上拉加载、下拉刷新
  • 给列表添加头和尾
  • 动画
  • 点击事件(item点击及item的子控件点击)
  • 分割线
  • 拖拽排序和侧划删除
  • 滑动及顶部标题透明度变化
  • 复杂布局
  • 卡片式Gallery效果
  • 增加和删除条目
  • 上下滑动、左右滑动
  • GridView 上下滑动、左右滑动
  • 瀑布流显示效果

 

二、实际应用

1、基本使用

+适配器

package com.lht.liuhaitao;

import android.app.Activity;
import android.support.v4.widget.SwipeRefreshLayout;
import android.os.Bundle;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.DividerItemDecoration;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends Activity {

    static final String TAG="MainActivity";
    private RecyclerView recyclerView;
    private SwipeRefreshLayout swipeRefreshLayout;
    private List lists;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        recyclerView=findViewById(R.id.recycler_view);
        swipeRefreshLayout=findViewById(R.id.swipe_regresh);
        lists=buildData();
        MyRecycleAdapter myRecycleAdapter=new MyRecycleAdapter(lists);
        //布局管理器
        LinearLayoutManager manager=new LinearLayoutManager(this);
        //方向,当然不同的布局管理器会有不同的特性
        manager.setOrientation(LinearLayoutManager.VERTICAL);
        recyclerView.setLayoutManager(manager);
        //分割线
        recyclerView.addItemDecoration( new DividerItemDecoration(this,DividerItemDecoration.VERTICAL));
        //设置添加,删除,移动,改变时候item的动画
        recyclerView.setItemAnimator(new DefaultItemAnimator());
        recycl
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值