ListView 学习 缓存 3
来源:互联网 发布:centos查看端口 编辑:程序博客网 时间:2024/04/29 07:16
在ListView 开发中,如果数据量小,那缓存的效果不是很好,也就显示不出来这种效果,但是当数据量变得很大的时候,滑动ListView菜单变得很困难的时候,这样用户体验就变得很差,这个时候就需要使用ListView的缓存来处理这样的问题,在一般情况下,使用LayoutInflater进行加载文件
LayoutInflate 类似于finViewById这个方法,但是两个有完全的区别,LayoutFlate这个方法是将layout下的mxl布局文件进行加载,并且实例化,而后者,实在加载完毕后可以根据xml文件中的不同的id进行查找相应的标签并且得到相应的对象,所以在ListView的adapter中的getView方法可以缓存的调用;
LayoutInflater inflater = (LayoutInflater)context.getSystemService (Context.LAYOUT_INFLATER_SERVICE);
因为context是activity的父类,所以可以构建自定义的adapter时候,需要传入相应的activity,在构造方法中就可以传入,然后可以根据上面的方法获得LayoutFater的对象
这里打个小的叉,得到LayoutFater对象可以有3中方式;
1. LayoutInflater inflater = getLayoutInflater();//调用Activity的getLayoutInflater() 2. LayoutInflater inflater = LayoutInflater.from(context); 3. LayoutInflater inflater = (LayoutInflater)context.getSystemService (Context.LAYOUT_INFLATER_SERVICE);
在第三种方式获得systemService的,在参数可以进行变化获得吸纳供应的对象,参数如下:
传入的Name 返回的对象说明WINDOW_SERVICEWindowManager管理打开的窗口程序LAYOUT_INFLATER_SERVICELayoutInflater取得xml里定义的viewACTIVITY_SERVICEActivityManager管理应用程序的系统状态POWER_SERVICEPowerManger电源的服务ALARM_SERVICEAlarmManager闹钟的服务NOTIFICATION_SERVICENotificationManager状态栏的服务KEYGUARD_SERVICEKeyguardManager键盘锁的服务LOCATION_SERVICELocationManager位置的服务,如GPSSEARCH_SERVICESearchManager搜索的服务VEBRATOR_SERVICEVebrator手机震动的服务CONNECTIVITY_SERVICEConnectivity网络连接的服务WIFI_SERVICEWifiManagerWi-Fi服务TELEPHONY_SERVICETeleponyManager电话服务inflate 方法
这样可以在程序中有context的对象时进行获取吸纳供应的服务。回到主题:
在ListView中可以这样获取到布局文件:
public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder = null; //ViewHolder将相当于一个暂时的存储器,将产生的View存储起来 if (convertView == null) { holder=new ViewHolder(); convertView = mInflater.inflate(R.layout.vlist2, null); holder.img = (ImageView)convertView.findViewById(R.id.img); convertView.setTag(holder); }else { holder = (ViewHolder)convertView.getTag(); } holder.img.setBackgroundResource((Integer)mData.get(position).get("img")); holder.viewBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { showInfo(); } }); return convertView; }
这种方式是最快的,在google大会上也是这种最快
当处理一些耗时的资源加载的时候需要做到以下几点,以使你的加载更快更平滑:
1. 适配器在界面主线程中进行修改
2. 可以在任何地方获取数据但应该在另外一个地方请求数据
3. 在主界面的线程中提交适配器的变化并调用notifyDataSetChanged()方法
0 0
- ListView 学习 缓存 3
- ListView学习(二)-ListView缓存机制
- listview缓存
- listview缓存优化
- 关于 ListView 缓存优化
- Android ListView 视图缓存
- ListView的缓存原理
- Listview视图缓存优化
- listview的缓存机制
- ListView的缓存原理
- ListView缓存机制
- Android ListView缓存对象
- ListView缓存机制
- ListView缓存优化
- ListView缓存原理剖析
- ListView缓存 RecycleBin 解析
- ListView优化-ViewHolder缓存
- ListView缓存优化机制
- IOS设计模式之三:MVC模式
- 11、克隆
- 品胜无线中继宝(WRR001N)
- #ifdef 条件编译,其实如此简单
- Codeforces Round #296 (Div. 2) B(思维题)
- ListView 学习 缓存 3
- sublime text3常用快捷键和插件安装
- Reading Notes for AngularJS -- Chapter 5
- linux(ubuntu14.04)+GPU+cuda6.5+caffe+openCV2.4.9+matlab2014a+python的新手配置
- c语言头文件
- SQL Injection的猥琐技巧
- Q3: N皇后问题
- 初学SQL错误集锦
- Web Service 的工作原理