ViewHolder通用,优雅写法

最近在做项目时,又要写 ViewHolder,

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

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

看看这些,或许会有收获!

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

ViewHolder超简洁写法 点击跳转

优雅的使用ViewHolder 点击跳转

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

第二种 优雅写法中有一点点小问题,应该是作者粗心!

直接贴代码了:

第一种:import android.util.SparseArray;import android.view.View;/** * ViewHolder 的通用写法 * * 来自 : * * @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;}}使用方法:@Overridepublic 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 优雅写法 * * 来自: * * @author LiuJinpeng * */public class ViewHolder2 {private final SparseArray<View> views;private View convertView;private ViewHolder2(View convertView) {super();this.views = new SparseArray<View>();this.convertView = convertView;convertView.setTag(this);}public static ViewHolder2 getHolder(View convertView) {if (convertView.getTag() == null) {<span style="white-space:pre"></span>//这里应该是作者粗心写错了,如果查看的是原文章记得修改return new ViewHolder2(convertView);}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 getView(int position, View convertView, ViewGroup parent) {if (convertView == null) {convertView = LayoutInflater.from(context).inflate(R.layout.good_list_item, null, false);}ViewHolder mViewHolder = ViewHolder.get(convertView);TextView price = mViewHolder.getView(R.id.price);// …其他getViewreturn convertView;}其中第一篇文章还分享了一个框架:

base-adapter-helper 点击打开链接

暂时没时间研究,有兴趣的同学可以看一下!

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

一路走来,我们无法猜测将是迎接什么样的风景,

ViewHolder通用,优雅写法

相关文章:

你感兴趣的文章:

标签云: