浅谈SortedList方法使用

2016-06-26 09:34 评论 0 条

一.摘要

SortedList继承Object,属于android.utils包工具类,与java.utils包下的ListArrayList木有什么关系(继承或实现)。一个排序的list实现类保证items选项的顺序,list顺序、items值改变发送提醒通知,比如:RecyclerView.Adapter。比较items之间的位置关系使用compare(Object,Object)方法,该方法采用的是二分查找获取items。如果items排序的标准发生改变,当编辑时未避免数据的不一致需要确保回调合适的方法。SortedList.Callback元素用于控制items的顺序和通知改变。

二.内部类

SortedList嵌套两个内部类SortedList.BatchedCallbackSortedList.Callback,前者用于批量通知被SortedList调度的事件的回调实现,后者控制SortedList的行为。

三.构造方法

SortedList(Class kclass,Callback callback)

创建一个指定类型T的SortedList对象。

SortedList(Class kclass,Callback callback,int initialCapacity)

创建一个指定类型T的SortedList对象,同时指定长度initialCapacity。

四.SortedList方法解析

查看SortedList文档后发现,SortedList可以指定位置更新数据或批量更新,删除指定的item值,数据的操作包括:比较,插入,删除,移动,改变,分别回调对应的方法:compare()onInserted()onRemoved()onMoved()onChanged(),相比ArrayList,LinkedList,SortedList操作更加方便。创建一个实体SortedListBean,使用SorteList存储实体对象,然后根据id排序,简单的用法:

  1. /** 
  2.  * Created by TeachCourse.cn on 2016/6/25 10:31. 
  3.  */  
  4. public class SorteListBean implements Serializable {  
  5.     private  String id;  
  6.     private String name;  
  7.   
  8.     public String getId() {  
  9.         return id;  
  10.     }  
  11.   
  12.     public void setId(String id) {  
  13.         this.id = id;  
  14.     }  
  15.   
  16.     public String getName() {  
  17.         return name;  
  18.     }  
  19.   
  20.     public void setName(String name) {  
  21.         this.name = name;  
  22.     }  
  23.   
  24.     public SorteListBean(String id, String name) {  
  25.         this.id = id;  
  26.         this.name = name;  
  27.     }  
  28. }  

SortedList在用法上和ArrayList或LinkedList一样,功能上比它们多一些,代码比较多,只粘贴部分

  1. /** 
  2.  * 初始化数据 
  3.  */  
  4. private void initData() {  
  5.         mSortedList = new SortedList<SorteListBean>(SorteListBean.class, mBatchedCallback);  
  6.         mSortedList.add(new SorteListBean("2011110924""zhaolin"));  
  7.         mSortedList.add(new SorteListBean("2011110925""bocheng"));  
  8.         mSortedList.add(new SorteListBean("2011110926""binge"));  
  9.         mSortedList.add(new SorteListBean("2011110927""boge"));  
  10.         mSortedList.add(new SorteListBean("2011110928""wangzai"));  
  11. }  
  12.   
  13. /**重写内部类 
  14.  *初始化回调内部类 
  15.  */  
  16. private SortedList.Callback<SorteListBean> mCallback = new SortedList.Callback<SorteListBean>() {  
  17.   
  18.   
  19.         @Override  
  20.         public int compare(SorteListBean o1, SorteListBean o2) {  
  21.             String id1 = o1.getName();  
  22.             String id2 = o2.getName();  
  23.             return id1.compareTo(id2);  
  24.         }  
  25.   
  26.         @Override  
  27.         public void onInserted(int position, int count) {  
  28.   
  29.         }  
  30.   
  31.         @Override  
  32.         public void onRemoved(int position, int count) {  
  33.   
  34.         }  
  35.   
  36.         @Override  
  37.         public void onMoved(int fromPosition, int toPosition) {  
  38.   
  39.         }  
  40.   
  41.         @Override  
  42.         public void onChanged(int position, int count) {  
  43.   
  44.         }  
  45.   
  46.         @Override  
  47.         public boolean areContentsTheSame(SorteListBean oldItem, SorteListBean newItem) {  
  48.             return false;  
  49.         }  
  50.   
  51.         @Override  
  52.         public boolean areItemsTheSame(SorteListBean item1, SorteListBean item2) {  
  53.             return false;  
  54.         }  
  55.     };  
  56. /** 
  57.  * 批量回调 
  58.  */  
  59. protected SortedList.BatchedCallback<SorteListBean> mBatchedCallback = new SortedList.BatchedCallback<SorteListBean>(mCallback);  

1.add(T item),添加给出的item到list中

  1. mSortedList.add(new SortedListBean("2011110929","teachcourse.cn"));  

2.addAll(T... items),一次性添加多个items到list中

  1. mSortedList.addAll(new SortedListBean("2011110929","teachcourse.cn"),new SorteListBean("2011110924""zhaolin"));  

3.addAll(Collection items),添加给出的items到指定的list中,不修改输入

  1. Collection<SorteListBean> collection=new ArrayList<>();  
  2.     collection.add(new SorteListBean("2011110924""zhaolin"));  
  3.     collection.add(new SorteListBean("2011110925""bocheng"));  
  4.     collection.add(new SorteListBean("2011110927""boge"));  
  5.     collection.add(new SorteListBean("2011110928""wangzai"));  
  6.     mSortedList.addAll(collection);  

关于Collection的使用讲解可以查看《Collection接口解析

4.addAll(T[] items,boolean mayModifyInput),添加给出的items到指定的list中,mayModifyInput为true允许修改输入

  1. SorteListBean[] sorteListBeen=new SorteListBean[]{new SorteListBean("2011110924""zhaolin"),new SorteListBean("2011110925""bocheng")};  
  2.           mSortedList.addAll(sorteListBeen,true);  

5.beginBatchedUpdates(),批量处理适配器更新操作发生在调用当前方法和调用endBatchedUpdates()之间

  1. mSortedList.beginBatchedUpdates();  
  2.      try {  
  3.          mSortedList.add(new SorteListBean("2011110924""zhaolin"))  
  4.          mSortedList.add(new SorteListBean("2011110925""bocheng"))  
  5.          mSortedList.remove(new SorteListBean("2011110927""boge"))  
  6.          ...  
  7.      } finally {  
  8.          mSortedList.endBatchedUpdates();  
  9.      }  

6.clear(),从SortedList中删除所有的items

  1. mSortedList.clear();  

6.endBatchedUpdates(),结束更新事务,回调处理事件,和beginBatchedUpdates()一起使用

7.get(int index),返回指定索引的item

  1. SortedListBean bean=mSortedList.get(0);  

8.indexOf(T item),返回指定item对应的索引位置

  1. int index=mSortedList.indexOf(mSortedListBean);  

9.recalculatePositionOfItemAt(int index),重新计算指定索引的item位置,当没有触发onChanged(int,int)回调方法时

  1. final int position = mSortedList.indexOf(item);  
  2.      item.incrementPriority(); // assume items are sorted by priority  
  3.      mSortedList.recalculatePositionOfItemAt(position);  

10.remove(T item),删除指定的item,然后调用onRemoved()方法

  1. mSortedList.remove(mSortedListBean);  

11.removeItemAt(int index),删除指定索引的item,然后调用onRemoved()方法

  1. mSortedList.removeItemAt(0);  

12.updateItemsAt(int index,T item),更新指定索引的item,然后调用onChanged(int,int)方法,onMoved(int,int)方法

  1. mSortedList.updateItemAt(0,new SorteListBean("2011110927""boge"));  

当前文章价值1.43元,扫一扫支付后添加微信提供帮助!(如不能解决您的问题,可以申请退款)

你可能感兴趣的文章

来源:每日教程每日一例,深入学习实用技术教程,关注公众号TeachCourse
转载请注明出处: https://www.teachcourse.cn/1870.html ,谢谢支持!

资源分享

分类:Android 标签:,
关于universal imageloader缓存你需要知道的秘密 关于universal imageloader缓存你
自定义View浅谈(一) 自定义View浅谈(一)
Android学习笔记八:Java常用数据结构 Android学习笔记八:Java常用数
Android开发工程师笔试题–001 Android开发工程师笔试题--001