学习目标:
理解getView
代码部分:
使用Java语言
@Override
public View getView(int position, View convertView, ViewGroup viewGroup) {
ViewHold viewHold;
//判断是否存在缓存
if (convertView == null) {
viewHold = new ViewHold();
convertView = LayoutInflater.from(content).inflate(R.layout.demo_item, viewGroup, false);
viewHold.textView = convertView.findViewById(R.id.title);
viewHold.button = convertView.findViewById(R.id.confirm);
convertView.setTag(viewHold); //将Holder存储到view中,给下次view用来复用
}else{
viewHold = (ViewHold) convertView.getTag();//复用view
}
viewHold.textView.setText(title.get(position));
return convertView;
}
class ViewHold {
TextView textView;
Button button;
}
- getView 意思为获取该条目要显示的界面
参数名 | 含义 |
---|---|
position | 下标 |
convertView | 系统提供的可使用的缓存对象 |
viewGroup | 根对象 |
判断convertView是否为空是为了复用对象,减少内存开销。
ViewHold为内部类的原因是因为ViewHold只在adapter中使用一次。
当convertView为空时,意味着是第一次加载adapter,需要加载一个对象,使用LayoutInflater的方法把模板加载进来,最后将设置好的viewHold对象用setTag保存到convertView中的缓存中,在下一次加载视图时复用对象。
当convertView不为空时,viewHold对象从convertView中获取设置好的的viewHold对象;从而达到对象复用的目的。
viewHold.textView.setText(title.get(position));
最后将想要的数据设置到指定位置。