BaseAdapter使用与优化

BaseAdpter自由度很高,能实现很多需求,十分值得学习.

 这是listview的Item的布局

实现BaseAdpter首先得创建继承BaseAdpter类

public class MyAdapter  extends  BaseAdapter{
private List<ItemContent> list;
private LayoutInflater inflater;
private Context context;
ItemContent content; //item封装对象
	@Override
	public int getCount() {
		// TODO 自动生成的方法存根
		return 0;    //return list.size();得到list长度
	}

	@Override
	public Object getItem(int position) {
		// TODO 自动生成的方法存根
		return null;      // <span style="white-space:pre">	</span>return list.get(position);得到list指定position位置item

	@Override
	public long getItemId(int position) {
		// TODO 自动生成的方法存根
		return 0;     //return position; 得到当前item位置
	}

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {  //返回控件
		// TODO 自动生成的方法存根
		return null;
	}



 

<strong>getView 耗时写法</strong>
<strong></strong><pre name="code" class="java">public View getView(int position, View convertView, ViewGroup parent) {
		// TODO 自动生成的方法存根
		content = list.get(position);      //得到当前item封装类对象
		View view =inflater.inflate(R.layout.listitem, null); //加载布局
		ImageView imageView=(ImageView) view.findViewById(R.id.imageView1);
		TextView tv= (TextView) view.findViewById(R.id.textView1);
		Button button=(Button) view.findViewById(R.id.button);
		imageView.setImageResource(content.image); 
		tv.setText(content.text);
		button.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO 自动生成的方法存根
				Toast.makeText(context, "click", 0).show();
			}
		});
		return view;


 
 } 
 

 
上述这样写代码虽然简短,但每个item都得重新加载布局和findviewbyid,对手机负担较大十分影响性能。
所以推荐用下面这种优化方式 添加ViewHolder内部类find控件和判断convertView 是否已被加载,这样所以的初始化只有进行一次就够了,对性能的优化显著提升
public View getView(int position, View convertView, ViewGroup parent) {
		// TODO 自动生成的方法存根

		content = list.get(position);  //得到当前item封装类对象

		
		ViewHolder viewHolder;

		if (convertView == null) {  //只有null时才会加载布局
                  viewHolder = new ViewHolder();
convertView = inflater.inflate(R.layout.listitem, null); 
// 缓存 ,不重复创建
viewHolder.imageView = (ImageView) convertView.findViewById(R.id.imageView1);
viewHolder.tv = (TextView) convertView.findViewById(R.id.textView1);
viewHolder.button=(Button) convertView.findViewById(R.id.button);
convertView.setTag(viewHolder);//设置标签}else 
{viewHolder=(ViewHolder) convertView.getTag();
viewHolder.imageView.setImageResource(content.image); 
viewHolder.tv.setText(content.text);
viewHolder.button.setOnClickListener(new OnClickListener() 
@Override
public void onClick(View v) {// TODO 自动生成的方法存根
Toast.makeText(context, "click", 0).show();}});
return convertView;}

class ViewHolder {   // 防止findviewbyid重复使用
			ImageView imageView;
			TextView tv;
			Button button;
		}
 

                
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值