Android中holder模式的使用

来源:互联网 发布:mac启动战网闪退 编辑:程序博客网 时间:2024/05/22 20:40

Android中的holder模式,网上介绍的文章不多,其实在很多地方都有所应用。

在本博客的另外一篇文章中有对BaseAdapter的介绍,在重写getView方法时,随着Listview数目的增加,不断的执行getLayoutInflater的inflate方法获得view,再获得相应的布局子空间,这样的重复执行,无疑效率是很差的。

@Override          public View getView(int position, View convertView, ViewGroup parent) {              // TODO Auto-generated method stub              convertView = getLayoutInflater().inflate(R.layout.lv_items, null);              TextView txt = (TextView)convertView.findViewById(R.id.txt);              txt.setText("第" + position + "个");              return convertView;          }


这时候Holder模式就可以派上用场了。

首先,声明Holder类:

class Holder{TextView txt;}

然后在getView中做相应处理:

@Overridepublic View getView(int position, View convertView, ViewGroup parent) {// TODO Auto-generated method stubHolder holder;if(convertView==null){holder  = new Holder();convertView = getLayoutInflater().inflate(R.layout.lv_items, null);holder.txt = (TextView)convertView.findViewById(R.id.txt);convertView.setTag(holder);//给convertView添加Holder,然后再用getTag()取出来}else{holder = (Holder)convertView.getTag();}holder.txt.setText("第" + position + "个");return convertView;}
可以看到所有的view都只执行了一次,如果ListView数量,控件很多的话,将会极大的提高了程序的效率。

比起其他的开发模式,这个Holder真是又小又可爱,大家一定会很喜欢。






0 0
原创粉丝点击