android封装adapter,安卓封装Baseadapter

这是一个关于Android开发的博客,作者展示了如何创建一个抽象的`CommonAdapter`类,它继承自`BaseAdapter`。`CommonAdapter`包含了一个`ViewHolder`类,用于提高列表视图的性能。`ViewHolder`缓存了视图,避免频繁查找。博客中还给出了一个具体的`MyAdapter`例子,用于展示如何在`CommonAdapter`的基础上绑定数据,并实现点击监听功能。

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

package com.base.baseandroid;

import android.content.Context;

import android.view.View;

import android.view.ViewGroup;

import android.widget.BaseAdapter;

import java.util.List;

public abstract class CommonAdapter extends BaseAdapter {

private Context mContext;

private List mDatas;

private int mLayoutId;

public CommonAdapter(Context context, List datas, int layoutId) {

this.mContext = context;

this.mDatas = datas;

this.mLayoutId = layoutId;

}

@Override

public int getCount() {

return mDatas.size();

}

@Override

public T getItem(int position) {

return mDatas.get(position);

}

@Override

public long getItemId(int position) {

return position;

}

@Override

public View getView(int position, View convertView, ViewGroup parent) {

ViewHolder holder = ViewHolder.get(mContext, convertView, mLayoutId, position);

setValueForView(holder, getItem(position));

return holder.getConvertView();

}

public abstract void setValueForView(ViewHolder holder, T t);

}

package com.base.baseandroid;

import com.lidroid.xutils.BitmapUtils;

import android.content.Context;

import android.graphics.Bitmap;

import android.util.SparseArray;

import android.view.LayoutInflater;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.ImageView;

import android.widget.TextView;

public class ViewHolder {

private SparseArray mViews;

protected int mPosition;

private View mConvertView;

private Context context;

private BitmapUtils bitmapUtils;

public View getConvertView() {

return mConvertView;

}

public ViewHolder(Context context, int layoutId, int position) {

this.mPosition = position;

this.mViews = new SparseArray();

this.context = context;

bitmapUtils = new BitmapUtils(context);

mConvertView = LayoutInflater.from(context).inflate(layoutId, null);

mConvertView.setTag(this);

}

public static ViewHolder get(Context context, View convertView, int layoutId, int position) {

if (convertView == null) {

return new ViewHolder(context, layoutId, position);

} else {

ViewHolder holder = (ViewHolder) convertView.getTag();

holder.mPosition = position; // 注意:这句代码是必须的,否则复用的时候position会出错

return holder;

}

}

public  T getViewById(int viewId) {

View view = mViews.get(viewId);

if (view == null) {

view = getConvertView().findViewById(viewId);

mViews.put(viewId, view);

}

return (T) view;

}

public ViewHolder setText(int viewId, String text) {

TextView textView = getViewById(viewId);

textView.setText(text);

return this;

}

public ViewHolder setImageResource(int viewId, int resId) {

ImageView p_w_picpathView = getViewById(viewId);

p_w_picpathView.setImageResource(resId);

return this;

}

public ViewHolder setImageBitmap(int viewId, Bitmap bitmap) {

ImageView p_w_picpathView = getViewById(viewId);

p_w_picpathView.setImageBitmap(bitmap);

return this;

}

public ViewHolder setImg(int viewId, String url) {

ImageView p_w_picpathView = getViewById(viewId);

bitmapUtils.display(p_w_picpathView, url);

return this;

}

public ViewHolder setImgOnClick(int viewId, OnClickListener onClickListener) {

ImageView p_w_picpathView = getViewById(viewId);

p_w_picpathView.setOnClickListener(onClickListener);

return this;

}

}

package com.base.adapter;

import java.util.List;

import android.content.Context;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Toast;

import com.base.baseandroid.CommonAdapter;

import com.base.baseandroid.ViewHolder;

import com.base.bean.CountryBean;

import com.example.baseandroid.R;

public class MyAdapter extends CommonAdapter {

private Context context;

public MyAdapter(Context context, List data, int layoutId) {

super(context, data, layoutId);

this.context = context;

}

@Override

public void setValueForView(ViewHolder holder, final CountryBean bean) {

holder.setText(R.id.tv_list_country, bean.getcCountryName());

holder.setImg(R.id.iv_list_country, bean.getFlagImage());

holder.setImgOnClick(R.id.iv_list_country, new OnClickListener() {

@Override

public void onClick(View v) {

Toast.makeText(context, bean.getcCountryName(), 1).show();

}

});

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值