android适配器封装,Android万能适配器(一)封装ViewHolder

本文主要介绍了Android中ViewHolder的封装方法。可使用Map或效率更高的SparseArray将Item布局中的控件存储到容器。还给出了封装ViewHolder工具类的代码,以及使用封装后ViewHolder的示例,使用后代码变得简洁。

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

封装 ViewHolder

简单分析ViewHolder封装。ViewHolder内部正常是保存每个页面控件的索引,那么封装时候我们可以使用容器把每个Item布局中的所有控件存储到这个容器里面,每次使用时候从容易查询.这里用Map可以实现。也可以使用SparseArray替换,SparseArray比Map效率更高。

/**

* 封装ViewHolder工具类

* @author IsCoding

*/

public class ViewHolder {

private final HashMap mViews;

private View mConvertView;

public ViewHolder(Context context, ViewGroup parent, int layoutId,

int position) {

this.mViews = new HashMap();

mViews.clear();

mConvertView = LayoutInflater.from(context).inflate(layoutId, parent,

false);

mConvertView.setTag(this);

}

public static ViewHolder get(Context context, View convertView,

ViewGroup parent, int layoutId, int position) {

if (convertView == null) {

return new ViewHolder(context, parent, layoutId, position);

}

return (ViewHolder) convertView.getTag();

}

public T getView(int viewId) {

View view = mViews.get(viewId);

if (view == null) {

view = mConvertView.findViewById(viewId);

 
 

下面看一下使用封装后的ViewHolder的效果

package com.iscoding.mobile.adaptertest.test2.adapter;

import java.util.List;

import com.iscoding.mobile.adaptertest.R;

import com.iscoding.mobile.adaptertest.test2.ViewHolder;

import android.content.Context;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.widget.BaseAdapter;

import android.widget.TextView;

public class MyAdapter2 extends BaseAdapter {

private LayoutInflater mInflater;

private Context mContext;

private List mDatas;

public MyAdapter2(Context context, List mDatas) {

mInflater = LayoutInflater.from(context);

this.mContext = context;

this.mDatas = mDatas;

}

@Override

public int getCount() {

return mDatas.size();

}

@Override

public Object 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

ViewHolder viewHolder = ViewHolder.get(mContext, convertView, parent,

R.layout.item_1, position);

// 通过getView获取控件

TextView tv = viewHolder.getView(R.id.text_title);

// 使用

tv.setText(mDatas.get(position));

return viewHolder.getConvertView();

}

} 使用封装好的

ViewHolder 已经使代码看起来简洁非常多了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值