首页 > 代码库 > ViewHolder模式简洁写法
ViewHolder模式简洁写法
参考网址:
http://blog.csdn.net/hmily7532361/article/details/18368235 在安卓中 自定义Adapter时,使用ViewHolder可缓存每个Item的View,减少一些不必要的操作,提高性能。在网上看到一种比较简洁的写法,避免每个自定义的Adapter定义ViewHolder实体类。
import android.util.SparseArray;
import android.view.View;
/**
*
* @类名 ViewHolderUtils
* @功能描述 数据源 Adapter 中 优化 控件 获取 辅助类
* @作者 2014-5-19 / 郝志东
* @备注 <对应的分析文档、设计文档或其他备注说明>
* @修改记录
* R1:
* 修改作者:修改日期 / 修改人员姓名
* 修改理由:
*/
public class ViewHolderUtils {
/**
* 增加一个私有构造函数防止外部实例化
*/
private ViewHolderUtils() {
}
/**
*
* @功能 从缓存中 获取 View 控件 对象,如果不存在缓存就初始化后放入缓存,以备下次使用;
* 知识点: Android应用性能优化之使用SparseArray替代HashMap;
* @param view 当前Item 布局 View
* @param id 当前Item中 某个View 的id值
* @return 当前Item中对应id的View对象
* @作者 2014-5-19 / 郝志东
*/
public static <T extends View> T get(View view, int id) {
SparseArray<View> viewHodler = (SparseArray<View>) view.getTag();
if (viewHodler == null) {
viewHodler = new SparseArray<View>();
view.setTag(viewHodler);
}
View childView = viewHodler.get(id);
if (childView == null) {
childView = view.findViewById(id);
viewHodler.put(id, childView);
}
return (T) childView;
}
}在自定义的Adapter中getView函数中调用方式如下:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
if (convertView == null) {
if (mInflater == null) {
mInflater = LayoutInflater.from(mContext);
}
convertView = LayoutInflater.from(mContext).inflate(
R.layout.item_listview_healtheducation, parent, false);
}
// 从 缓冲 中 获取 TextView 对象
TextView titleView = ViewHolderUtils.get(convertView,
R.id.tv_item_healtheducation);
ConductContentItem item = getItem(position);
if (item != null) {
titleView.setText(item.ConductName);
}
return convertView;
}来自为知笔记(Wiz)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。