zoukankan      html  css  js  c++  java
  • Android RecyclerView Adapter 新式用法之SortedListAdapterCallback

    引言

    前几天在同事的提醒下发现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/.

  • 相关阅读:
    Cocos游戏引擎,让小保安成就大梦想
    Android 高仿QQ5.2双向側滑菜单DrawerLayout实现源代码
    Java中字符串相等与大小比較
    Android四大基本组件之 Activity
    C++基础学习教程(五)
    HAWQ技术解析(八) —— 大表分区
    Jenkins 安装与使用--实例
    Android多点触控技术,实现对图片的放大缩小平移,惯性滑动等功能
    Mycat(4):消息表mysql数据库分表实践
    谋哥:《App自推广》开篇之回到远古人类
  • 原文地址:https://www.cnblogs.com/xyczero/p/4847735.html
Copyright © 2011-2022 走看看