对于提升Android中频繁使用的ListView子Item View的加载效率,基于两点基本考虑:

1,Android的View的创建比较消耗资源;

2,findViewById()也不是最快的。

所以在实际开发中经常使用的适配器中的getView()方法:

public View getView(int position, View convertView, ViewGroup parent);

如果每次都在里面创建一个新View出来,将导致效率低下,比较高效率的做法是每次判断convertView是否为空,若不为空,则直接使用convertView的findViewById()把子View重建出来即可。

但是,这种做法虽然提升了效率,但仍不是最高效的做法,因为还是使用了findViewById()。

因此,进一步的效率提升改进之处是:使用一种称为“ViewHolder”的技术,缓存convertView中的View组件,使用convertView的setTag()和getTag(),每次当ListView需要创建Item的View时候,调用convertView的getTag()找出ViewHolder,重新复用。具体的使用方法如代码所示:

package zhangphil.listview;import android.app.ListActivity;import android.content.Context;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.ArrayAdapter;import android.widget.ListView;import android.widget.TextView;public class MainActivity extends ListActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);ListView lv = this.getListView();setContentView(lv);ArrayAdapter adapter = new MyAdapter(this,android.R.layout.simple_list_item_2);lv.setAdapter(adapter);}private class MyAdapter extends ArrayAdapter {private int resId;private LayoutInflater mInflater;privateViewHolder holder = null; public MyAdapter(Context context, int resource) {super(context, resource);this.resId = resource;mInflater = LayoutInflater.from(context);}//子View的“容器”public final class ViewHolder {public TextView text1;public TextView text2;}@Overridepublic int getCount() {//巨大的数据return 10000;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {if (convertView == null) {convertView = mInflater.inflate(resId, null);holder = new ViewHolder();  holder.text1=(TextView) convertView.findViewById(android.R.id.text1);holder.text2=(TextView) convertView.findViewById(android.R.id.text2);convertView.setTag(holder); }elseholder=(ViewHolder) convertView.getTag();holder.text1.setText("text1:"+position);holder.text2.setText("text2:"+position);return convertView;}}}



更多相关文章

  1. 使用User Agent分辨出Android设备类型的安全做法
  2. ArrayMap是如何提高内存的使用效率的?
  3. 关于Android中SharedPreferences提交数据效率的调研
  4. KJFrameForAndroid 1.3beta 发布,Android高执行效率框架
  5. Java效率真的很低吗?Android为何要采用?
  6. Android之倍数提高工作效率的 Android Studio 奇技
  7. Android:倍数提高工作效率的 Android Studio 奇技
  8. Android高效率编码-findViewById()的蜕变-注解,泛型,反射

随机推荐

  1. 去除Android系统应用的通知功能
  2. android通过USB使用真机调试程序
  3. 一个Google Play的开发者,要了解的一些小
  4. Android(安卓)如何使EditText不自动获取
  5. [Android进阶]Android中使用的观察者模式
  6. Android各种访问权限Permission详解
  7. Android之eclipse简单NDK入门
  8. Android(安卓)开发者的 Flutter(五) —— F
  9. 《论Android的发展方向(个人见解)》
  10. Android跨进程通信AIDL详解(附源码)