RecycleView:
是Android L版本中新添加的一个用来取代ListView的SDK,它的灵活性与可替代性比listview更好。

RecyclerView与ListView原理是类似的:
都是仅仅维护少量的View并且可以展示大量的数据集。
RecyclerView:
1、item的排列方式:两种布局管理器:

LinearLayoutManager
GridLayoutManager

2、操作item的时候提供默认的动画效果
3、item多种布局比较方便
4、封装了item的优化
5、适配器不同
不同点:
1、分割线,RecyclerView要自定义设置
2、监听器,RecyclerView没有条目监听器,需要在适配器中自定义

RecyclerView用以下两种方式简化了数据的展示和处理:
使用LayoutManager来确定每一个item的排列方式
为增加和删除项目提供默认的动画效果
也可以定义自己的LayoutManager和添加删除动画

使用RecycleView步骤:
一、添加依赖

  //材料设计包
  compile 'com.android.support:design:23.4.0'

  //cardview包裹item布局,美化效果
  compile 'com.android.support:cardview-v7:23.4.0'

  //下拉刷新包裹RecyclerView布局
  compile 'in.srain.cube:ultra-ptr:1.0.11'

二、相关方法

  //如果可以确定每个item的高度是固定的,设置这个选项可以提高性能
  recyclerView.setHasFixedSize(true);

  //设置item布局之间的分割线,三个选择
  recyclerView_main.addItemDecoration(new DividerGridItemDecoration(mContext))

  //设置布局管理器
  recyclerView.setLayoutManager(LinearLayoutManager、GridLayoutManager)

  //设置动画效果
  recyclerView.setItemAnimator(new DefaultItemAnimator());

  //设置适配器
  recyclerView.setAdapter(adapter);

  //上拉加载下一页
  recyclerView_main.addOnScrollListener(//两个方法:
  线性布局管理器得到最后一条item的position;判断,然后页码++)

  //置顶功能
  recyclerView.scrollToPosition(0);

三、实现下拉刷新:

1、SwipeRefreshLayout:(系统自带的,只是下拉的时候布局并没有被下拉,需要自定义)
  //包裹RecyclerView布局
  //渐变颜色
  swipeRefreshLayout.setColorSchemeColors(...)
  //监听刷新
  swipeRefreshLayout.setOnRefreshListener(//curPage = 1;loadNetworkData();)
  //加载完成,消失图标
  swipeRefreshLayout.setRefreshing(false);

2、第三方类库:library_pullToReflect
  //布局:PullToRefreshRecyclerView

  //用法和RecycleView类似

  //如设置布局管理器、设置分割线或者分割空间、set item的高度是固定的

  //addOnScrollListener(//几乎很RecycleView一样,下拉刷新)

3、PtrFrameLayout:(需要导包,依赖项)

  //布局:PtrFrameLayout包裹RecyclerView

  //有两种:
  ①、旋转圆圈的header(类似SwipeRefreshLayout)

    Ⅰ、new一个StoreHouseHeader header,然后设置:
      header.setBackgroundColor
      header.setTextColor
      header.initWithString("LOADING...")
    Ⅱ、添加header,ptrFrameLayout.setHeaderView(header);
    Ⅲ、绑定UI与刷新状态的监听:ptrFrameLayout.addPtrUIHandler(header);
    Ⅳ、添加刷新动作监听:ptrFrameLayout.setPtrHandler(new PtrDefaultHandler)

  ②、默认的经典header(类似pullTorefresh效果)

    Ⅰ 、new一个PtrClassicDefaultHeader
    Ⅱ、添加header,ptrFrameLayout.setHeaderView(header);
    Ⅲ、绑定UI与刷新状态的监听:ptrFrameLayout.addPtrUIHandler(header);
    Ⅳ、添加刷新动作监听:ptrFrameLayout.setPtrHandler(new PtrDefaultHandler)

  // 刷新完成,让刷新Loading消失
  ptrFrameLayout_main.refreshComplete();

四、RecyclerView的适配器

  Ⅰ 、自定义适配器继承 RecyclerView.Adapter<RecyclerView.ViewHolder>
    导包正确的化可以简写成Adapter<ViewHolder>

  Ⅱ、声明属性,Context 、 数据源 、 LayoutInflater
    构造器初始化

  Ⅲ、重写方法:
    onCreateViewHolder(parent , typeView):填充View,并返回new ViewHolder(view)
    onBindViewHolder(holder , position);赋值,并加载图片
    getItemId(position)

  Ⅳ、ViewHolder内部类 继承 RecyclerView.ViewHolder
    声明UI控件,构造器初始化

  Ⅴ、重新加载数据:reloadListView(数据源 、 isClear)

  Ⅵ、额外的方法:
    notifyDataSetChanged()
    notifyItemInserted(position)
    notifyItemRangeInserted(positionStart, itemCount)
    notifyItemRemoved(position)
    notifyItemChanged(position)

  Ⅶ、如果需要设置单击监听、长按监听
    1、interface OnItemClickedListener:两个抽象方法
      void onItemClick(int position)
      boolean onItemLongClick(int position)
    2、声明接口对象:listener、声明RecyclerView对象,并在构造器中传入RecyclerView对象
    3、setOnItemClickedListener(接口对象){this.listener = listener}
    4、ViewHolder要实现View的单击、长按监听器
    5、重写单击监听器
      if (listener != null) {
        int position = recyclerView.getChildPosition(v)
        listener.onItemClick(position)
      }
        长按监听器:
      if (listener != null) {
        int position = recyclerView.getChildPosition(v)
        return listener.onItemLongClick(position)
      }
      return false
  6、主页就可以调用setOnItemClickedListener(new ...)

附CardView:
  <android.support.v7.widget.CardView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="5dp"
    android:elevation="5dp"
    app:cardCornerRadius="10dp">

</android.support.v7.widget.CardView>

灵活性比Listview更好的RecycleView的更多相关文章

  1. graphicview和widgets没本质区别。它只是更轻量级,更灵活,性能更高的widgets

    graphicview和widgets没本质区别.它只是更轻量级,更灵活,性能更高的widgets.核心就是把widgets变成了更轻量级的graphicitem,把QWidget的各种事件转换成了g ...

  2. Android 比ListView更好用强大的RecyclerView库:RecyclerViewLibrary

    RecyclerViewLibrary A RecyclerView libirary ,has some support, like headerAdapter/TreeAdapter,and Pu ...

  3. Android开发之recycleView详解代码,看完包你熟练掌握recycleView的用法。转自网络经典文章

    来源 http://jinyudong.com/2014/11/13/Introduce-RecyclerView-%E4%B8%80/ 编辑推荐:稀土掘金,这是一个针对技术开发者的一个应用,你可以在 ...

  4. Android 高级编程 RecyclerView 控件的使用

    RecyclerView 是Android 新添加的一个用来取代ListView的控件,它的灵活性与可替代性比listview更好. 看一下继承关系: ava.lang.Object    ↳ and ...

  5. Introducing RecyclerView(一)

    RecyclerView 是Android L版本中新添加的一个用来取代ListView的SDK,它的灵活性与可替代性比listview更好.接下来通过一系列的文章讲解如何使用RecyclerView ...

  6. RecyclerView使用介绍

    来源 http://jinyudong.com/2014/11/13/Introduce-RecyclerView-%E4%B8%80/ 编辑推荐:稀土掘金,这是一个针对技术开发者的一个应用,你可以在 ...

  7. delphi if 语句循环语句

    if语句------------------------------------------------------------------------------------------------ ...

  8. Android RecyclerView使用 及 滑动时加载图片优化方案

    1.控制线程数量 + 数据分页加载2.重写onScrollStateChanged方法 这个我们后面再谈,下面先来看看RecyclerView控件的使用及我们为什么选择使用它 RecyclerView ...

  9. flutter、rn、uni-app比较

    前言 每当我们评估新技术时要问的第一个问题就是“它会给我们的业务和客户带来哪些价值?”,工程师们很容易对闪闪发光的新事物着迷,却经常会忽略这些新事物其实可能对我们的客户没有任何好处,反而只会让现有的工 ...

随机推荐

  1. [转载]Java synchronized详解

    在编写一个类时,如果该类中的代码可能运行于多线程环境下,那么就要考虑同步的问题.在Java中内置了语言级的同步原语--synchronized,这也大大简化了Java中多线程同步的使用.我们首先编写一 ...

  2. POJ3320 Jessica's Reading Problem(尺取+map+set)

    POJ3320 Jessica's Reading Problem set用来统计所有不重复的知识点的数,map用来维护区间[s,t]上每个知识点出现的次数,此题很好的体现了map的灵活应用 #inc ...

  3. Java学习----构造方法的重载

    一个类中有多个同名的参数不一样(参数的个数,参数的类型,参数的顺序)的构造方法 public class Student { public Student() { System.out.println ...

  4. sql server2008附加数据库5120错误

    解决方法: 附加数据库时,显示错误,错误信息为 一种解决方法为,设置mdf文件所在文件夹的权限(有些资料说只设置mdf文件的权限就好,但我试了不管用),在文件夹上右击——属性——安全,如图所示: 选择 ...

  5. REST简介及设计原则

    rest,即REST(Representational State Transfer表述性状态转移)是一种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性. 简介 REST (R ...

  6. 如何用angularjs制作一个完整的表格之二__表格分页功能

    接上一次,这次主要介绍表格分页功能,由于项目需要这个案例是关于前端分页的方式,现在很少会这么用了,但如有需要可以参考其中的思路 html: 1.通过UL来展示页标,其中每个页标的li是通过异步加载从获 ...

  7. Phalcon处理404页面的 Ruter 方法

    /** * Initializes the router * * @param array $options */ protected function initRouter($options = a ...

  8. Activity完整的生命周期

    首语:群里看到一位网友说:你能说出Activity的完整生命周期吗?看到这句话,我也在反思自己,我也是个fresh,所以想找个时间仔细的扒一扒Activity生命周期. 首先拿一张简单而又复杂的生命周 ...

  9. Ultra UltraEdit中取消提示:你要转换 File 为 DOS 格式吗?

    Ultra Edit中取消提示:文件可能不是DOS格式,你要转换 File 为 DOS 格式吗? UE 提示 取消取消这个提示: 高级 -> 配置 -> 文件处理 -> DOS/UN ...

  10. EMS-keil C51常用错误

    1. LAB100.C(12): error C216: subscript on non-array or too many dimensions 原程序如下: #include <reg51 ...