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

  • 相关阅读:
    Html禁止粘贴 复制 剪切
    表单标签
    自构BeanHandler(用BeansUtils)
    spring配置中引入properties
    How Subcontracting Cockpit ME2ON creates SD delivery?
    cascadia code一款很好看的微软字体
    How condition value calculated in sap
    Code in SAP query
    SO Pricing not updated for partial billing items
    Javascript learning
  • 原文地址:https://www.cnblogs.com/xyczero/p/4847735.html
Copyright © 2011-2022 走看看