RecyclerView常见问题和优化之使用详情

1.RecyclerView是什么?

RecyclerViewAndroid5.0后谷歌推出的一个用于在有限的窗口中展示大量数据集合的控件,位于support-v7包中;它可以实现与ListView和GridView一样的效果,提供了一种插拔式的体验,高度的解耦,异常的灵活,只需设置其提供的不同的LayoutManagerItemAnimatorItemDecoration,就能实现不同的效果;

2.RecyclerView有什么优势?

  • 支持局部刷新
  • 可以自定义item增删时的动画
  • 能够实现item拖拽和侧滑删除等功能;
  • 默认已实现View的复用,而且回收机制更加完善;

3.RecyclerView配合类?

实现RecyclerView的步骤

  • 首先,确定列表和网格的外观,一般来说,您可以使用RecyclerView库的某个标准布局管理器,例如LinearLayoutManagerGridLayoutManagerStaggeredGridLayoutManager或者继承LayoutManager自定义布局管理器;
  • 设计列表中每个元素的外观和行为,根据此设计,扩展ViewHolder类;您的ViewHolder版本提供了列表项所有的功能;您的ViewHolderView的封装容器,且该视图有RecyclerView管理;
  • 定义了用于将您的数据与ViewHolder视图相关联的Adapter

RecyclerView.LayoutManager

RecyclerView 使用布局管理器将各个项放置在屏幕上,并确定何时重复使用不再对用户可见的项目视图。为了重复使用(或循环使用)视图,布局管理器可能会让 Adapter 使用数据集中的不同元素替换视图的内容。以这种方式循环使用视图可避免创建不必要的视图或执行代价高昂的 findViewById() 查找,从而提高性能。Android 支持库包含三个标准布局管理器,每个管理器都提供了许多自定义选项:

  • LinearLayoutManager 将各个项排列在一维列表中。将 RecyclerView LinearLayoutManager 搭配使用可提供类似于旧版 ListView 布局的功能。
  • GridLayoutManager 将各个项排列在二维网格中,就像棋盘上的方格一样。将 RecyclerView GridLayoutManager 搭配使用可提供类似于旧版 GridView 布局的功能。
  • StaggeredGridLayoutManager 将各个项排列在二维网格中,每一列都在前一列基础上稍微偏移,就像美国国旗中的星星一样。

如果这些布局管理器都不符合您的需求,您可以通过扩展 RecyclerView.LayoutManager 抽象类来创建自己的布局管理器,需要理解Recycle、Scrap、Dirty这些关于子项目视图状态的概念。

RecyclerView.Adaper

RecyclerView提供了一个抽象Adapter类,然后就没有了。没有任何可以直接使用的子类,像ListAdapter那样的ArrayAdapterSimpleCursorAdapter现成的类都没有。一切都留给开发者自己去实现定义。

仔细想想这也很挺正常,相信应该很少在实际产品中有使用ArrayAdapter的,因为大部分列表都不会是简单的一行文字。对于CursorAdapter使用也往往会实现不同的继承类来提供子视图。再者RecyclerViewAdapterListAdapter在理念上还是一样的,所以想实现个RecyclerViewCursorAdapter,直接从CursorAdapter取材便可。

RecyclerViewAdapter相对ListAdapter在接口上有几处变化也值得注意。

  首先其将getView()方法分拆成了createViewHolder()bindViewHolder()两个。不过这个没有什么好紧张的,在CursorAdapter里就已经有见到过这个更加合理的设计。另外返回对象也从View变成了ViewHolder只需提一下。

最关键的注意点在于createViewHolder(ViewGroup parent, int viewType)第二参数虽然是整形,但是它并不是以往的当前子项的位置(position),而是调用getItemVi

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值