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/.

  • 相关阅读:
    需要
    js学习
    vc 异常堆栈记录,这样不怕突然异常了
    1
    [Java] 动态代理 02 --生成代理主题角色
    [Java] 静态代理
    [Java] 反射机制 02
    [Java] 反射机制 01
    [Java] 正则表达式 02 EmailSpider 抓邮件, CodeCounter 统计程序有效代码行数
    [Java] 正则表达式 01 (基本都概览)
  • 原文地址:https://www.cnblogs.com/xyczero/p/4847735.html
Copyright © 2011-2022 走看看