ListView为什么要使用convertView和ViewHolder
16lz
2021-01-26
原因就是:
1. 使用convertView可以避免重复地调用inflate
2. 使用ViewHolder可以避免重复地调用findViewById
下面的getView代码来自于
[plain] view plain copy
- development/samples/ApiDemos/src/com/example/android/apis/view/List14.java
[java] view plain copy
- /**
- *Makeaviewtoholdeachrow.
- *
- *@seeandroid.widget.ListAdapter#getView(int,android.view.View,
- *android.view.ViewGroup)
- */
- publicViewgetView(intposition,ViewconvertView,ViewGroupparent){
- //AViewHolderkeepsreferencestochildrenviewsto<spanstyle="color:#ff0000;">avoidunneccessarycalls
- //tofindViewById()</span>oneachrow.
- ViewHolderholder;
- //WhenconvertViewisnotnull,wecanreuseitdirectly,<spanstyle="color:#ff0000;">thereisnoneed
- //toreinflateit.</span>WeonlyinflateanewViewwhentheconvertViewsupplied
- //byListViewisnull.
- if(convertView==null){
- convertView=mInflater.inflate(R.layout.list_item_icon_text,null);
- //CreatesaViewHolderandstorereferencestothetwochildrenviews
- //wewanttobinddatato.
- holder=newViewHolder();
- holder.text=(TextView)convertView.findViewById(R.id.text);
- holder.icon=(ImageView)convertView.findViewById(R.id.icon);
- convertView.setTag(holder);
- }else{
- //GettheViewHolderbacktogetfastaccesstotheTextView
- //andtheImageView.
- holder=(ViewHolder)convertView.getTag();
- }
- //Bindthedataefficientlywiththeholder.
- holder.text.setText(DATA[position]);
- holder.icon.setImageBitmap((position&1)==1?mIcon1:mIcon2);
- returnconvertView;
- }
更多相关文章
- Android(安卓)Activity 二
- startActivity调用流程及生命周期
- [原][Android]All WebView methods must be called on the same
- ContentProvider原理分析二 MediaProvider publish .
- Android系统Intent中的Uri使用
- 【Android开发经验】FaceBook推出的Android图片加载库-Fresco
- viewpage setOnPageChangeListener 监听的详解
- IntentService解析
- android 调用视图报错The specified child already has a parent