前言攻城狮在开发APP的过程中,难免会撩起ListView、GridView等组件,发几眼。自然而然,原生态美女BaseAdapter是程序员的最爱。有了它,我们就可以为所欲为了,呵呵,你懂的O(∩_∩)O哈哈~不过我们每次写一个BaseAdapter的时候,都会有意识的给他写一个ViewHolder,一个或者两个就好了,万一有应用里数不清的ListView,呵呵~你妹!他们都是一样的,我看腻了。作为22世纪最伟大的程序员,摆脱它永远是我们最真诚的追求,那么如何从BaseAdapter中摆脱ViewHolder呢?把它变成一个华丽的工具类实现,放在角落里孤独的工具类。ViewHolder的实现我觉得应该简单介绍一下ViewHolder的实现。Google巧妙地利用了在Adapter中复用View的思路,自然而然的让我们的屌丝手机有了一些百富美的应用成为可能。ViewHolder的具体实现基本体现在BaseAdapter的getView(intposition,ViewconvertView,ViewGroupparent)方法中,见如下代码:@OverridepublicViewgetView(intposition,ViewconvertView,ViewGroupparent){ViewHolderholder;if(convertView==null){convertView=inflater.inflate(R.layout.listview_item_layout,parent,false);holder=newViewHolder();holder.studentName=(TextView)convertView.findViewById(R.id.student_name);holder.studentAge=(TextView)convertView。findViewById(R.id.student_age);convertView.setTag(holder);}else{holder=(ViewHolder)convertView.getTag();}Studentdata=(Student)getItem(position);holder.studentName.setText(data.getName());holder.studentAge.setText(data.getAge());returnconvertView;}classViewHolder{publicTextViewstudentName;publicTextViewstudentAge;}显然,请不要问我ViewHolder在哪里。ViewHolder类。这里ViewHolder的用法主要有两个,一个是convertView的复用,一个是ViewHolder的复用,也就是convertView中的index。具体用法不熟悉的可以自行百度,今天的博文很抱歉,因为写这段代码的目的绝对不是介绍你如何使用ViewHolder,只是想告诉你:传统的ViewHolder写法,臃肿!而每一个新的BaseAdapter,你都得无聊的一遍又一遍的去实现,OH~ViewHolder的工具类自然是要实现的,你需要从小就改掉,趁早行动。既然无聊了,就把它写成一个工具类吧。看下面的代码);view.setTag(viewHolder);}ViewchildView=viewHolder.get(id);if(childView==null){childView=view.findViewById(id);viewHolder.put(id,childView);}return(T)childView;}}这是工具类的实现。先说一下实现原理:1.由于ViewHolder依赖于View的Tag存储,所以存储在一个SparseArray集合中。2.判断View中的Tag中是否有viewHolder,如果不存在,就让她生一个。3.然后在viewholder(也就是SparseArray)中寻找Viewindex。如果没有,就快速找到ViewById,放进去再返回出来。如果已经存在,那大家都开心,直接用就行了。粘贴BaseAdapter中使用的代码:@OverridepublicViewgetView(intposition,ViewconvertView,ViewGroupparent){if(convertView==null){convertView=inflater.inflate(R.layout.listview_item_layout,parent,false);}TextViewname=Tools.ViewHolder。get(convertView,R.id.student_name);TextViewage=Tools.ViewHolder.get(convertView,R.id.student_age);Studentdata=(Student)getItem(位置);name.setText(data.getName());年龄.setText(data.getAge());returnconvertView;}简洁明了,不用多说了~~~嘿嘿,以后要写ViewHolder,直接调用Tools工具类就可以了,省心它。.可行性分析既然是作为一个工具类来使用,那么我们就需要评估一下这个工具的价值是否值得我们使用。一般来说,我们可以从以下几个方面进行评价:易用性?内存泄漏?性能改进?健壮性?.....易用性:工具最大的特点就是易用性和简单性。ViewHolder是以典型的开箱即用方式编写的。我们不用费心写一些适配代码,直接传入View和id,高内聚,松散。耦合。并且它采用了
