convertview与viewholder

原创 2015年07月10日 15:46:59

convertview是指在recycler构件中的view。

前7个view的形成过程

android的listView在初始化的时候,如果整个屏幕只能放下7个item,那么就会只会inflate7个view,创建7个viewholder。也就是说

 if (convertView == null) {
                 convertView = mInflater.inflate(R.layout.item,null);
                  holder = new ViewHolder();//convertView下的三个控件ItemTitle、ItemText、ItemButton交由 holder管理,
                                                             // 即holder对象hold着这三个控件,一个convertview对应一个viewholder
                                    
                   holder.title = (TextView) convertView.findViewById(R.id.ItemTitle);
                    holder.text = (TextView) convertView.findViewById(R.id.ItemText);
                    holder.bt = (Button) convertView.findViewById(R.id.ItemButton);
                    convertView.setTag(holder);//绑定ViewHolder对象       
                    
                   }

这个if语句块只会执行7次。

然后经以下语句给convertview里的组件设置内容

holder.title.setText(getData().get(position).get("ItemTitle").toString());

 holder.text.setText(getData().get(position).get("ItemText").toString());
  最后  这前7个view(convertview)功德圆满,有型有值,可以return convertview了。     

以后的view的形成过程

当第一个view滑出屏幕时,这个view就会落到recycler中,这时convertview就不再等于null了,而是这个view了,只可惜,每一个落到recycler中的view都会剥离掉它的值,只剩下它的型。也就是说落到recycler中的view仍然绑定了ViewHolder对象,但是convertview里的组件的内容已经不复存在了,需要重新设置。所以会执行以下语句。

holder = (ViewHolder)convertView.getTag();

holder.title.setText(getData().get(position).get("ItemTitle").toString());
holder.text.setText(getData().get(position).get("ItemText").toString());


所以将这两个形成过程结合起来,就是:

 public View getView(final int position, View convertView, ViewGroup parent) {
       
 ViewHolder holder;

 if (convertView == null) {
                     convertView = mInflater.inflate(R.layout.item,null);
                     holder = new ViewHolder();/
                                    
                    holder.title = (TextView) convertView.findViewById(R.id.ItemTitle);
                    holder.text = (TextView) convertView.findViewById(R.id.ItemText);
                    holder.bt = (Button) convertView.findViewById(R.id.ItemButton);
                    convertView.setTag(holder);//绑定ViewHolder对象       
                    
                   }

else{

                    holder = (ViewHolder)convertView.getTag();

                   }

holder.title.setText(getData().get(position).get("ItemTitle").toString());
holder.text.setText(getData().get(position).get("ItemText").toString());

.......

}

注:不用if和else语句不会在界面上有什么改变,只是会增大内存花销,因为不使用recycler中的convertview,而去自己创建,每一个列表项都要inflate一个view,创建一个viewholder

以下是不用if和else语句的代码

 public View getView(final int position, View convertView, ViewGroup parent) {
       
                   ViewHolder holder;

                   convertView = mInflater.inflate(R.layout.item,null);
                     holder = new ViewHolder();/
                                    
                    holder.title = (TextView) convertView.findViewById(R.id.ItemTitle);
                    holder.text = (TextView) convertView.findViewById(R.id.ItemText);
                    holder.bt = (Button) convertView.findViewById(R.id.ItemButton);
                    convertView.setTag(holder);//绑定ViewHolder对象   
            

                    

holder.title.setText(getData().get(position).get("ItemTitle").toString());
holder.text.setText(getData().get(position).get("ItemText").toString());

.......

}



版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

ListView性能优化之convertView和ViewHolder

最近碰到的面试题中经常会碰到问"ListView的优化"问题。所以就拿自己之前写的微博客户端的程序做下优化。 自己查了些资料,看了别人写的博客,得出结论,ListView优化大致从以下几个角度: ...

探秘ListView的ConvertView以及ViewHolder原理

转自:http://zhiweiofli.iteye.com/blog/1269746 最近在使用android的组件ExpandableListView,实现需求时,遇到不少奇怪的问题。 ...
  • cc_lq
  • cc_lq
  • 2011-12-21 09:04
  • 1533

ListView中convertView和ViewHolder的工作原理

LsitView和Adapter 参考:http://www.cnblogs.com/xiaowenji/archive/2010/12/08/1900579.html 工作原理: ...

ListView的性能优化之convertView和viewHolder

转自:方杰的http://blog.fangjie.info/2014/05/14/ListView自己的理解总结: convertView是利用Recycler对于离开屏幕视角的item的View...

Adapter优化(一)convertView和ViewHolder机制

一、初步 像ListView、GridView这些组件通常需要使用setAdapter方法传入一个适配器,这个Adapter的作用,初步理解就是把一个xml形式的item返回成View给组件吧(理论...

浅谈ListView之convertView和viewHolder

最近开发相册时,碰到缩略图现实的问题,功能实现后发现滚动时比较的卡顿, 先就ListView优化问题提出几点看法: 1、复用已经生成的convertView; 2、添加viewHolder类; 3、缓...

ListView中convertView和ViewHolder的工作原理

引言:       android开发中Listview是一个很重要的组件,它以列表的形式根据数据的长自适应展示具体内容,用户可以自由的定义listview每一列的布局,但当listview有大量的...

Android-listvie-优化-convertview/viewholder

http://blog.csdn.net/u010940300/article/details/44196671 使用convertView,viewHolder来优化Listvie...

ListView中convertView和ViewHolder的工作原理

参考:http://blog.csdn.net/bill_ming/article/details/8817172ListView工作原理: ListView针对List中每个item,要求adapt...

ListView为什么要使用convertView和ViewHolder

原因就是: 1. 使用convertView可以避免重复地调用inflate 2. 使用ViewHolder可以避免重复地调用findViewById 下面的getVie...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)