ListView使用itemType遇到的问题

来源:互联网 发布:java线程和进程区别 编辑:程序博客网 时间:2024/06/05 06:47

一. ListView 添加多类型布局

  1. 重写getViewTypeCount(),返回拥有的布局类型个数。
  2. 重写getItemViewType(int position):根据position返回类型

    注意:此处返回的类型可定义为常量,且从0开始,否则可能出现数组越界异常
    java.lang.ArrayIndexOutOfBoundsException: length=2; index=2
    at android.widget.AbsListView$RecycleBin.addScrapView(AbsListView.java:6705)

3、重写getView方法,根据position调用getItemViewType(int position)方法来判断不同的item布局类型,之前使用传统的viewHolder缓存机制即可。

注意:在ListView的缓存机制中,会根据布局类型的个数,创建一个ArrayList<View>[] mScrapViews来缓存convertView ,每一个ArrayList是一类布局的复用converView,故每个item类型传入的复用convertView肯定就是对应的类型布局view。

二.ListView 中的getViewTypeCount()使用动态设置遇到的问题

为了在初始化时给listView 设置适配器,重写了一个没有数据源的适配器构造器,然后写了一个setData()方法设置数据,然后在此方法中计算ViewTypeCount,导致在设置数据后,复用过程中出现了 复用的convertView 和 类型不匹配的情况,导致viewHolder为空,出现空指针异常。这种情况就需要每次创建适配器给ListView,不能再动态数据源。
原创粉丝点击