我对AdapterView、Adapter优化的理解
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
holder = new ViewHolder();
convertView = inflater.inflate(R.layout.topic_list, null);
holder.title = (TextView) convertView.findViewById(R.id.title);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
}
public class ViewHolder {
public TextView getTitle() {
if (title == null) {
title = (TextView) baseView.findViewById(R.id.title);
}
return title;
}
}
大概思想是setTag();getTag();来保存已经加载过了的 ViewHolder 组件,现在我称ViewHolder 为ABCD 意为毫无特殊意义的类,顶多用到了单例的思想。
但是我觉得这些都是毫无意义的, 用tag来保存ViewHolder 这个属于耍小聪明的意思,曲解了tag的本意。另外整个代码并没有真正达到需要的要求Listview的展现可以看成是分页,系统会加载第一页 我们从写getView 的时候convertView是null 可以看成是第一页的样式没有被初始化。
这个时候我们
holder = new ViewHolder(); convertView = inflater.inflate(R.layout.topic_list, null);
holder.title = (TextView) convertView.findViewById(R.id.title);
开始进行初始化的工作,”第二页“之后这些不必再进行,所以 我认为网上所说的优化指的就是减少“第一页”之后的View创建。这个确实是不错。
但是这种优化没有实质上的改进,有时候我在想为什么全部加载完毕listView回拉还会调用getView()把我的一些初始化代码再来一遍?这个显然是不合理的,而且不仅仅是初始化问题,一个listView之所以卡主要原因在于来回的进行逻辑操作,例如:listView里面有imageview 而且里面的image是从网络上的,而且你没有存到本地之类的处理,而且显示出来的时候还要根据width来控制整张图片的尺寸进行缩放,加载listview不可避免的需要做这些操作也就算了,如果已经加载过了这些数据在来回拖拽的时候也要再操作一遍就会令人无法忍受!
怎么去优化?一方面,我们知道了第一页之后不必要再new 新的View出来,另外一方面我们知道了最重要的是View的内容部能来回、重复初始化。
个人觉得android里面应该有这样的“属性”或者“设置” 让每一项加载过之后不需要再加载直接使用”缓存“的数据。
但是我没有发现这种“设置”,于是我在Adapter 里面用一个HashMap<Integer, View> 储存对应的View
HashMap<Integer, View> m = new HashMap<Integer, View>();
public View getView(int position, View view, ViewGroup parent) {
View convertView = m.get(position);
if (convertView != null) {
return convertView;
} else {
convertView = inflater.inflate(R.layout.topic_list, null);
TextView title = (TextView) convertView
.findViewById(R.id.title);
m.put(position, convertView);
}
}
暂时就这样了,潜在的问题和其他优化没有细想,成果是 20行带较大的图片的listView来回拖拽毫无压力。
文章导读
游戏推荐
- 热门
- 最新
会说话的狗狗本 Talking Be 会说话的狗狗本是会说话系列中的一款,知名度应该是仅次于会...
查看详情
弗拉特潜水 Flutty Diver vFlutty Diver(弗拉特潜水)是一款非常可爱的益智游戏,这是安卓...
查看详情
太空披萨 Space Pizza DeliSpace Pizza Delivery(太空披萨)是一款较为简单的跳跃类的小...
查看详情
人类:历史 Person: The HisPerson: The History(人类:历史)是一款画面非常单调的游戏,灰...
查看详情
会说话的狗狗本 Talking Be 会说话的狗狗本是会说话系列中的一款,知名度应该是仅次于会...
查看详情
弗拉特潜水 Flutty Diver vFlutty Diver(弗拉特潜水)是一款非常可爱的益智游戏,这是安卓...
查看详情
太空披萨 Space Pizza DeliSpace Pizza Delivery(太空披萨)是一款较为简单的跳跃类的小...
查看详情
人类:历史 Person: The HisPerson: The History(人类:历史)是一款画面非常单调的游戏,灰...
查看详情
软件推荐
- 热门
- 最新
海豚浏览器 v8.0今天,国产手机浏览器知名品牌海豚浏览器发布了它的一个最新...
查看详情
应用魔方 AppShare v2.4.3AppShare(应用魔方)是一款比较具有人气的安卓手机应用,它能够...
查看详情
超频软件 Voltage Control Voltage Control Extreme是安卓平台一款非常受欢迎的CPU超...
查看详情
音频管理器 AudioManager P音频管理器 (AudioManager Pro)的功能不错,能够方便你控制安卓...
查看详情
土司 v1.0土司是一款在线交流与分享软件,能够让你DIY自己的手机社区,你...
查看详情
海豚浏览器 v8.0今天,国产手机浏览器知名品牌海豚浏览器发布了它的一个最新...
查看详情
迈播 v2.0.1.0215迈播是由迈视网(www.maxtv.cn)开发的一款免费的手机视频应用,...
查看详情
应用魔方 AppShare v2.4.3AppShare(应用魔方)是一款比较具有人气的安卓手机应用,它能够...
查看详情
推荐文章
- 新闻
- 评测
- 教程

