ListView显示与缓存机制:
只会加载当前屏幕所要显示的数据。显示完成就会被回收到Recycler中。
BaseAdapter 基本结构:
public int getCount(); // 适配器中数据集中数据的个数
public Object getIten(int position); //获取数据集中与指定索引对应的数据项
public long getItemId(int position); //获取指定行对应的ID
public View getView(int position,View convertView,ViewGroup parent); //获取每一个Item的显示内容
ViewHolder优化BaseAdapter:
创建Bean对象,用于封装数据。
在构造方法中初始化用于映射的数据LIST.
创建ViewHolder类,创建布局映射关系。
判断convertView,为空则创建,并设置TAG,否则通过TAG来取出ViewHolder
给ViewHolder中的控件设置数据。
public
class
Adapter
extends
BaseAdapter{
private
List<ItemBean>
list
;
private
LayoutInflater
inflater
;
public
Adapter(List<ItemBean> list,Context context){
list=
this
.
list
;
//context要使用当前的Adapter的界面对象 minflater布局装载器对象
inflater
=LayoutInflater. from(context);
}
@Override
public
int
getCount() {
//
TODO
Auto-generated method stub
return
list
.size();
}
@Override
public
Object getItem(
int
position) {
//
TODO
Auto-generated method stub
return
list
.get(position);
}
@Override
public
long
getItemId(
int
position) {
//
TODO
Auto-generated method stub
return
position;
}
/**
* 返回每一项所显示的内容
*/
@Override
public
View getView(
int
position, View convertView, ViewGroup parent) {
ViewHold viewHold;
if
(convertView==
null
){
viewHold=
new
ViewHold();
convertView=
inflater
.inflate(R.layout.
item
,
null
);
viewHold .
ima geView
=(ImageView) convertView.findViewById(R.id.
IVimage
);
viewHold.
title
= (TextView) convertView.findViewById(R.id.
title
);
viewHold.
content
=(TextView) convertView.findViewById(R.id.
text
);
convertView.setTag(viewHold);
}
else
{
viewHold=(ViewHold) convertView.getTag();
}
ItemBean bean=
list
.get(position);
viewHold.
imageView
.setImageResource(bean.getImageid());
viewHold.
title
.setText(bean.getTitle());
viewHold.
content
.setText(bean.getText());
return
convertView;
}
class
ViewHold{
public
ImageView
imageView
;
public
TextView
title
;
public
TextView
content
;
}
}