近期在做项目时,又要写 ViewHolder。

突然想到网上看看有没什么好的写法!

不知道你是不是也烦透了写那些没有技术含量的ViewHolder

看看这些。也许会有收获!

然后就找到了以下两篇文章(感谢分享!

):

ViewHolder超简洁写法 点击跳转

优雅的使用ViewHolder 点击跳转

然后自己整理的了, 保存起来。省的忘记。顺便分享一下!

直接贴代码了:

第一种:
import android.util.SparseArray;
import android.view.View; /**
* ViewHolder 的通用写法
*
* 来自 : http://www.eoeandroid.com/thread-321547-1-1.html
*
* @author LiuJinpeng
*
*/
public class ViewHolder { private ViewHolder() {} @SuppressWarnings("unchecked")
public static <T extends View>T getChildView(View convertView,int id) { SparseArray<View> viewHolder = (SparseArray<View>) convertView.getTag(); if (viewHolder == null) {
viewHolder = new SparseArray<View>();
convertView.setTag(viewHolder);
} View childView = viewHolder.get(id); if (childView == null) {
childView = convertView.findViewById(id);
viewHolder.put(id, childView);
} return (T) childView;
} }

用法:

@Override
public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) {
convertView = LayoutInflater.from(context)
.inflate(R.layout.banana_phone, parent, false);
} ImageView bananaView = ViewHolder.get(convertView, R.id.banana);
TextView phoneView = ViewHolder.get(convertView, R.id.phone); BananaPhone bananaPhone = getItem(position);
phoneView.setText(bananaPhone.getPhone());
bananaView.setImageResource(bananaPhone.getBanana()); return convertView;
}
另外一种:
import android.util.SparseArray;
import android.view.View; /**
* ViewHolder 优雅写法
*
* 来自:http://stackvoid.com/using-adapter-in-efficiency-way/
*
* @author LiuJinpeng
*
*/
public class ViewHolder2 { private final SparseArray<View> views; private View convertView; private ViewHolder2(Context context, int layoutId) {
super();
this.views = new SparseArray<View>(); this.convertView = View.inflate(context, layoutId, null); convertView.setTag(this);
} /**
* 获取 holder
*
* @param context
* @param convertView getView 的 convertView
* @param layoutId item View 的 布局文件 id
* @return
*/
public static ViewHolder2 getHolder(Context context, View convertView,int layoutId) { if (convertView.getTag() == null) {
return new ViewHolder2(context, layoutId);
} return (ViewHolder2) convertView.getTag();
} @SuppressWarnings("unchecked")
public <T extends View>T getChildView(int viewId) {
View childView = views.get(viewId); if (childView == null) {
childView = convertView.findViewById(viewId);
views.put(viewId, childView);
} return (T) childView;
} public View getConvertView() {
return convertView;
} }

用法:

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

		ViewHolder mViewHolder = ViewHolder.get(context,convertView,layoutId);
TextView price = mViewHolder.getView(R.id.price);
// ...其它getView return mViewHolder.getConvertView();
}

当中第一篇文章还分享了一个框架:

base-adapter-helper 点击打开链接

临时没时间研究,有兴趣的同学能够看一下!

从事Android开发不久。有问题,希望大家留言交流,共同成长!

最新文章

  1. Android课程---进度条及菜单的学习
  2. POJ 1724 ROADS(二维SPFA)
  3. CentOS下yum安装wine
  4. 关于form.item不兼容的问题
  5. license文件生成原理
  6. Windows Store Javascript项目使用高德地图、谷歌地图、百度地图API
  7. 用Java语言实现简单的词法分析器
  8. python——几种截图对比方式!
  9. idea maven指定编译参数
  10. some knowledge of the IT world
  11. flask上传excel文件,无须存储,直接读取内容
  12. 【转】 DOTA2中的伪随机及其lua实现
  13. linux磁盘分区详解【转】
  14. 图片拼接SIFT
  15. POJ1716 贪心
  16. Java Executor 线程池
  17. Android成长之路-手势识别的实现
  18. c版http服务器 shttpd-1.38 vs2013
  19. 2017年最有价值的IT认证——From Global Knowledge
  20. 图表绘制工具--Matplotlib 3

热门文章

  1. POJ 1330 Nearest Common Ancestors(Tarjan离线LCA)
  2. XML wsdl soap xslt xsl ide
  3. 修改Hosts文件
  4. Spring Security Source Code -- 验证标准流程
  5. 设定十分钟android在状态栏上集成的开源project推荐
  6. hadoop 磁盘限额配置
  7. vc++远程调试工具
  8. pwd的实现
  9. 最想做的三个Delphi项目:Paint,IM,SQL,另外还有Smart,TMS,FMX,UML,FreePascal,Python4Delphi,Cheat Engine
  10. matlab图形矢量化解决方案