您的位置:首页 > 其它

BaseAdapter的使用

2015-05-16 23:58 337 查看
package com.example.baseadaptertest;

import java.util.List;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

/**
* ViewHolder 优化BaseAdapter的思路
* 1、创建Item类,用于封装数据
* 2、在构造方法中初始化用于映射的数据List
* 3、创建ViewHolder,创建布局映射关系
* 4、判断convertView是否为null,若为空,则设置tag,否则通过tag取出ViewHolder
* 5、给ViewHolder中的控件赋值设置数据。

*/

public class MyAdapter extends BaseAdapter {

private List<Item> mList;
private LayoutInflater inflater;

/*
* 内部类
*/
class ViewHolder {
public ImageView imgView;
public TextView title;
public TextView content;
}

/**
* 这样就把数据源和适配器关联起来了
* @param itemList
*/
public MyAdapter(List<Item> itemList , Context context) {
// TODO Auto-generated constructor stub
mList = itemList;
inflater = LayoutInflater.from(context);
}

@Override
public int getCount() {
// TODO Auto-generated method stub
return mList.size();
}

@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return mList.get(position);
}

@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}

/**
* 逗比式,么有利用到listview的缓存特征
*/

/*public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
View view = inflater.inflate(R.layout.lv_item, null);
ImageView imgView = (ImageView) view.findViewById(R.id.img);
TextView title = (TextView) view.findViewById(R.id.title);
TextView content = (TextView) view.findViewById(R.id.content);
Item item = (Item) getItem(position);
imgView.setImageResource(item.itemImageID);
title.setText(item.itemTitle);
content.setText(item.itemContent);
return view;
}
*/

/**普通式
* 如果没有缓存才创建新的View,但是findviewbyid事很费资源的,当视图树很复杂的时候,消耗的时间是很客观地
*/
/*
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
if(convertView == null){
convertView = inflater.inflate(R.layout.lv_item, null);//如果没有缓存才创建新的View,但是findviewbyid事很费资源的,当视图树很复杂的时候,消耗的时间是很客观地
}
ImageView imgView = (ImageView) convertView.findViewById(R.id.img);
TextView title = (TextView) convertView.findViewById(R.id.title);
TextView content = (TextView) convertView.findViewById(R.id.content);
Item item = (Item) getItem(position);
imgView.setImageResource(item.itemImageID);
title.setText(item.itemTitle);
content.setText(item.itemContent);
return convertView;
}*/

@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
ViewHolder viewHolder = new ViewHolder();
if(convertView == null){
viewHolder = new ViewHolder();
convertView = inflater.inflate(R.layout.lv_item, null);
/**
* 用ViewHolder来储存convertView的空的子View,最后关联到convertView
*/
ImageView imgView = (ImageView) convertView.findViewById(R.id.img);
viewHolder.imgView = imgView;
TextView title = (TextView) convertView.findViewById(R.id.title);
viewHolder.title = title;
TextView content = (TextView) convertView.findViewById(R.id.content);
viewHolder.content = content;
convertView.setTag(viewHolder);//关联一下
}
else{
viewHolder = (ViewHolder) convertView.getTag();//通过关联,赋值一下
}
Item item = (Item) getItem(position);
/**
* 通过给viewHolder.xxx赋值的方式,来给convertView赋值。
* 和普通模式相比,少了每次都要xxxView = convertView.findViewById(xxx),但多了储存空间,空间换时间
*/
viewHolder.imgView.setImageResource(item.itemImageID);
viewHolder.title.setText(item.itemTitle);
viewHolder.content.setText(item.itemContent);
return convertView;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  BaseAdapte