Android适配器之BaseAdapter

来源:互联网 发布:程序员考试通过条件 编辑:程序博客网 时间:2024/05/29 16:27
BaseAdapter  

所有适配器的父类,自定义很强,适合各种情况下使用,通过创建子类,重写方法实现
实际开发过程中一般是利用自定义适配器来继承BaseAdapter ;下面介绍如何BaseAdapter 的相关方法和参数.

使用适配器的步骤:
1、 准备数据    List,Map,int[]
2、 准备   每个Item的布局
3、 准备BaseAdapter的子类,完成各个方法
4、 设置到AdapterView显示到界面

getCount()
AdapterView 显示Item的个数
getItem()
返回Adapter数据中与指定索引对应的数据项   position
getItemId()
返回在列表中与指定索引对应的行id          position
getView()
设置AdapterView 每个Item显示的界面,每显示一个Item,调用一次
优化方案:
1. 重用缓存convertView传递给getView()方法来避免填充不必要的视图
2. 使用ViewHolder模式来避免没有必要的调用findViewById():因为太多的findViewById也会影响性能)

/*  position       当前操作的Item
 *   convertView    布局复用的View,当AdapterView滚动后,消失的ItemView会赋值到convertView,等待重新显示
 *  parent         AdapterView, ListView(list.setAdapter())
 */
@Override
 public View getView(int position, View convertView, ViewGroup parent) {
  ViewHolder holder;
  if (convertView == null) {
   convertView = inflater.inflate(R.layout.list_item, null);
   holder=new ViewHolder();
   holder.image = (ImageView) convertView.findViewById(R.id.imageView1);
   holder.text = (TextView) convertView.findViewById(R.id.textView1);
   /*ViewHolder对象作为标签附加到convertView上,当convertView被重复利用的时候,因为上面有ViewHolder对象,
          */ 所以convertView就具有了ViewHolder中的几个属性,这样就节省了findViewById()这个过程。
   convertView.setTag(holder);
  }else{
   holder=(ViewHolder) convertView.getTag();
  }
  holder.image.setImageResource(images[position % images.length]);
  holder.text.setText("Item" + position);
  return convertView;
 }
 /* 将item布局文件中需要展示的控件定义为属性
  *  用于将item中多个控件合成一个整体
  */
 class ViewHolder{
  ImageView image;
  TextView text;
 }


0 0
原创粉丝点击