ListView传递复杂对象用到的知识

来源:互联网 发布:上海华云数据 知乎 编辑:程序博客网 时间:2024/06/06 07:48

//留坑,周末在填

ListView的防错乱

  • ListView的item中包含CheckBox,默认情况下滑动会错乱
  • 错乱的原因是ItemView的复用,我们可以想到有两种解决方案
  • 将状态存储到Model中(比较推荐),Android中的数据加载符合MVC的设计模式,View的显示是根据Model来进行的,我们维护数据就OK
  • 将选中的项实用一个Map记录一下

接口回调

  • 主要用于数据的传递
  • 实现过程大体分为三步
  • 定义接口,定义接口中的方法
  • 在数据产生的地方持有接口的引用,当数据产生的时候,调用接口中的方法
  • 在需要处理数据的地方实现接口,并将接口的引用传递数据产生的地方

数据序列化

  • 使用Intent等传递复杂对象的时候,需要将对象序列化,Android中可以使用两种方案实现序列化
  • 实现Serializable接口,Java中的方式,使用文件的形式存储,效率相对低,数据持久性较好
  • 实现Parcelable接口,Android中特有的方式,将数据缓存到Ram中,效率高,稳定性相对较差

ThreadPoolExecutor

  • 线程池,专门用来处理高并发的线程,可以有效节约和复用资源
  • 咱们指定核心线程数是CPU的核心数 + 1,最大线程数 CPU的核心数 * 2 +1

ListView多布局

  • ListView除了简单的加载列表型的单一布局外,还可以同时加载多种布局
  • 只需在Adapter中实现getItemViewType和getViewTypeCount
  • 在getView的时候根据不同的type进行不同的布局导入,不同的数据加载

PullToRefresh

  • 下拉刷新,上拉加载
  • PullToRefresh是一个非常经典的刷新库,为多种View提供了下拉刷新与上拉加载:PullToRefreshListView,PullToRefreshGridView,PullToRefreshScrollView...
  • 使用起来非常非常简洁 在布局中进行声明,在Java中进行初始化
  • 为刷新View设置刷新监听,设置刷新,设置刷新样式,刷新Layout
  • 在刷新回调中处理数据,处理完成通知刷新View刷新结束

封装BaseAdapter

  • 我们经常用到的BaseAdapter包含中包含了大量的重复代码,我们应该设计一个封装,将通用代码提炼出来
  • 我们的BaseAdapter中的数据源通常是List,Model对于每一个Adapter基本都是不一样的,我们这里引用泛型来解决这个问题
  • 通过使用泛型我们可以解决除ViewHolder的所有问题,我们通过在ViewHolder中添加Map对已经实例化过的View进行缓存,来制作通用的ViewHolder
  • ViewHolder中我们还可以对外提供获取itemView中子View的方法,还可以直接对子View进行操作的方法
  • getView中复用机制是完全一样的,不一样的地方就是数据加载,我们将加载数据做成一个抽象方法,让子类去实现
0 0