BaseAdapter

BaseAdapter是数据与UI适配器,适用于ListView、Spinner、GridView等。虽然RecycleView使用更广泛,但BaseAdapter仍有其应用场景。主要内容包括:功能介绍(如getCount、getItem、getItemId、getView)、基本使用步骤(如创建bean、初始化List、实现ViewHolder)以及优化方法(如缓存机制减少视图创建,ViewHolder减少findViewById)。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 简介

BaseAdapter用于数据和UI界面的适配。可用于ListView,Spinner,GridView等。随着RecycleView的流行,BaseAdapter的应用已经越来越少了。

  • 功能介绍
  1. getCount返回数据的总量
  2. getItem返回该position上数据的内容
  3. getItemId返回该position上数据的Id
  4. getView返回该position上数据的视图
  • 使用简介
  1. 创建bean对象用于封装数据
  2. 在构造方法中初始化用于映射的List数据
  3. 创建ViewHolder类,创建布局映射关系
  4. 判断convertView,为空则创建,并设置tag,否则通过tag来取出Viewholder
  5. ViewHolder中的控件设置数据
  • 优化

主要是getView方法的优化。

  1. 利用缓存机制避免重复创建新的view对象

利用ViewHolder避免重复findViewById操作

 

实例:

package com.example.baseadapterdemo;

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;

public class TestAdapter extends BaseAdapter {

	private List<ItemBean> mList;
	private LayoutInflater mInflater;
	
	public TestAdapter(Context context, List<ItemBean> mList) {
		super();
		this.mList = mList;
		mInflater = LayoutInflater.from(context);
	}

	@Override
	public int getCount() {
		return mList.size();
	}

	@Override
	public Object getItem(int position) {
		return mList.get(position);
	}

	@Override
	public long getItemId(int position) {
		return position;
	}

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		
		ViewHolder mHolder; 
		
		if(convertView == null || convertView.getTag() == null) {
			//Time consuming 1 -- inflate
			convertView = mInflater.inflate(R.layout.item, null);
			mHolder = new ViewHolder();
			//Time consuming 2 -- findViewById
			mHolder.image = (ImageView) convertView.findViewById(R.id.iv_image);
			mHolder.title = (TextView) convertView.findViewById(R.id.tv_title);
			mHolder.content = (TextView) convertView.findViewById(R.id.tv_content);
			convertView.setTag(mHolder);
		} else {
			mHolder = (ViewHolder) convertView.getTag();
		}
		ItemBean bean = mList.get(position);
		mHolder.image.setImageResource(bean.itemResId);
		mHolder.title.setText(bean.itemTitle);
		mHolder.content.setText(bean.itemContent);
		return convertView;
	}
	
	//Google I/O
	class ViewHolder {
		public ImageView image;
		public TextView title;
		public TextView content;
	}

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值