ListView 使用BaseAdapter时的getItemViewType 和 getViewTypeCount作用

关于BaseAdapter的基础知识我们在这里就不讲解了:

getItemViewType() 和 getItemTypeCount()作用:

@Override
	public int getItemViewType(int position) {

		Message msg = myList.get(position);
		int type = msg.getType();
		Log.e("TYPE:", "" + type);
		return type;
	}

@Override
	public int getViewTypeCount() {
		return 7;
	}

在ListView的父类AbsListView中,有一个变量RecycleBin mRecycler,用来存储某一显示项布局对应的视图。实际存储在 ArrayList<View>[] 中,该数组的长度为getViewTypeCount的返回值。RecycleBin 是AbsListView的一个内部类。
当ListView执行 setAdapter方法时,mRecycler会重置,getViewTypeCount方法会被调用。        
        当ListView要显示某一项时,getItemViewType方法被调用,根据返回值在mRecycler搜索得到缓存的视图。这也是为什么getViewTypeCount返回值要比定义的视图类型常量值大的原因,否则会导致数组越界异常。
   然后调用getView方法,缓存的视图被传递给getView方法的convertView形参(详细可以参考AbsListView的obtainView方法)。
        当传递进来的convertView形参为null的话,需要根据该项的视图类型,初始化布局。
   最后给显示项填充数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值