引言

前几天在同事的提醒下发现V7中有了一个新的工具类SortedListAdapterCallback,配合RecyclerView Adapter和SortedList一起使用更加方便的管理我们在Adapter中的数据,省去我们很多“多余“的工作。

使用方法

  • 申明一个SortedList类型的数据聚合
	 SortedList<Object> mDataList;
  • 实现SortedListAdapterCallback抽象类
	static class ObjectListCallback extends SortedListAdapterCallback<Object>{

        public ObjectListCallback(RecyclerView.Adapter adapter) {
super(adapter);
} @Override
public int compare(Object o1, Object o2) {
//TODO:
return 0;
} @Override
public boolean areContentsTheSame(Object oldItem, Object newItem) {
//TODO:
return false;
} @Override
public boolean areItemsTheSame(Object item1, Object item2) {
//TODO:
return 0;
}
}

其中compare()函数是判断SortedList中数据的现实顺序的。而areContentsTheSame()和areItemsTheSame()这两个抽象方法初看好像差不多(.),但其实区别还是很大的,areContentsTheSame()是取代了equals方法,用于判断SortedList中Item是否改变,如果改变则调用onChanged()函数。 而areItemsTheSame()则是用于判断SortedList中两个Item是否代表相通对象,其实就是数据的去重。

  • 创建一个RecyclerView Adapter,并进行SortedList的初始化。
	mDataList = new SortedList<>(Object.class, new ObjectListCallback(mAdapter));
  • 当数据有发生改变时,例如删除,增加等,你只需直接对mDataList进行相应操作,再无需关心mAdapter内数据显示更新问题,例如notifyDataChanged等通知函数的调用,因为SortedListAdapterCallback内的回调函数会自动帮你完成。
	mDataList.beginBatchedUpdates();
mDataList.addAll(object);
mDataList.endBatchedUpdates();

这样就简单地完成了数据的加载,RecyclerView会自动刷新UI。

局限性

SortedListAdapterCallback目前仅支持与RecyclerView Adapter搭配使用,并不支持ListView。

结语

第一次见到SortedListAdapterCallback这个工具类时,第一感觉就是眼前一亮,因为它和我们一般认知的Adapter与DataLis间的依赖关系完全相反,它是将Adapter直接“塞入“到DataList中并把细节都进行了封装,这样我们就是只要关心DataList中的数据更新问题,而无需关心RecyclerView的各种刷新,哈哈,真的是非常方便,非常建议大家使用。

作者:XycZero

查看原文:http://www.xyczero.com/blog/article/27/.

Android RecyclerView Adapter 新式用法之SortedListAdapterCallback的更多相关文章

  1. 【转】Android各种Adapter的用法

    转自:http://my.oschina.net/u/658933/blog/372151 Android各种Adapter的用法 发表于5个月前(2015-01-27 10:56)   阅读(143 ...

  2. 极简的Android RecyclerView Adapter(使用DataBinding)

    阅读本篇文章需要读者对Android Databinding和RecyclerView有一定的了解. 简介 我们知道,DataBinding的核心理念是数据驱动.数据驱动驱动的目标就是View,使用D ...

  3. Android RecyclerView SearchView基本用法1

    版权声明:本文为xing_star原创文章,转载请注明出处! 本文同步自http://javaexception.com/archives/82 背景: 做了很多年的app开发,貌似没见过没有搜索功能 ...

  4. Android RecyclerView.Adapter notifyDataSetChanged 不起作用

    我在自己动手写RecyclerView的上拉加载更多,最后就差一步,这个时候数据已经加载完了,UI上面没有显示,我而且也调用了notifyDataSetChanged刷新item的数据,但是一直没效果 ...

  5. Android开发教程 - 使用Data Binding(六)RecyclerView Adapter中的使用

    本系列目录 使用Data Binding(一)介绍 使用Data Binding(二)集成与配置 使用Data Binding(三)在Activity中的使用 使用Data Binding(四)在Fr ...

  6. Android控件RecyclerView的基本用法

    Android控件RecyclerView的基本用法 转 https://www.jianshu.com/p/e71a4b73098f   github: https://github.com/Cym ...

  7. Android之Adapter用法总结-(转)

    Android之Adapter用法总结 1.概念 Adapter是连接后端数据和前端显示的适配器接口,是数据和UI(View)之间一个重要的纽带.在常见的View(List View,Grid Vie ...

  8. Android之Adapter用法总结(转)

    Android之Adapter用法总结 1.概念 Adapter是连接后端数据和前端显示的适配器接口,是数据和UI(View)之间一个重要的纽带.在常见的View(List View,Grid Vie ...

  9. Android之Adapter用法总结

    http://blog.csdn.net/fznpcy/article/details/8658155 Android之Adapter用法总结 1.概念 Adapter是连接后端数据和前端显示的适配器 ...

随机推荐

  1. Intersection - POJ 1410(线段与矩形是否相交)

    题目大意:给一个线段和一个矩形,判断线段是否和矩形有公共点.   分析:用矩形的四个边当线段判断与所给的线段是否有交点,需要注意的是给的矩形是不标准的,需要自己转换,还需要注意线段有可能在矩形内部. ...

  2. 使用hibernate更新数据库记录的信息的相关学习记录

    截选代码(可能遗漏标点符号): package name.sql; import java.util.List; import name.session.HibernateSessionFactory ...

  3. [转]C++ map容器用法

    C++ map的基本操作和使用 原文地址:http://blog.sina.com.cn/s/blog_61533c9b0100fa7w.html Map是c++的一个标准容器,她提供了很好一对一的关 ...

  4. winform 五子棋 判断输赢 分类: WinForm 2014-08-07 20:55 256人阅读 评论(0) 收藏

    新手上路,高手勿进! 利用数组,根据新旧数组值的不同,获取那个点是什么棋子: 说明: 棋盘:15*15; 定义4个全局变量: string[,] stroldlist = new string[15, ...

  5. uva 10916 Factstone Benchmark(对数函数的活用)

    Factstone Benchmark Amtel has announced that it will release a 128-bit computer chip by 2010, a 256- ...

  6. RPM命令用法详解

    RPM 有五种基本的操作方式(不包括创建软件包): 安装, 卸载, 升级, 查询,和验证. 下面我们就来逐一的讲解吧. 一. 安装RPM包 RPM 软件包通常具有类似foo-1.0-1.i386.rp ...

  7. qt 学习之路 :QML 语法

    前面我们已经见识过 QML 文档.一个 QML 文档分为 import 和对象声明两部分.如果你要使用 Qt Quick,就需要 import QtQuick 2.QML 是一种声明语言,用于描述程序 ...

  8. camera理论基础和工作原理

    写在前面的话,本文是因为工作中需要编写摄像头程序,因为之前没有做过这类产品,所以网上搜索的资料,先整理如下,主要参考文章如下,如果有侵权,请联系我:另外,转载请注明出处.本文不一定全部正确,如果发现错 ...

  9. CSS3条件判断——@supports/window.CSS.supports()(转)

    CSS3条件判断,听起来"不明觉厉",如果你对CSS稍为熟悉一点的话,你会发现CSS中的"@media"就是条件判断之一.是的,在CSS3的条件判断规范文档中包 ...

  10. iOS如何准确获取通知

    iOS获取通知需要注意以下三个地方iOS 设备收到一条推送(APNs),用户点击推送通知打开应用时,应用程序根据状态不同进行处理需在 AppDelegate 中的以下两个方法中添加代码以获取apn内容 ...