论坛首页 移动开发技术论坛

善意的谎言: AdapterView、Adapter优化

浏览 16407 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-01-09  
public View getView(int position, View view, ViewGroup parent)

这个view你不能直接用???????
0 请登录后投票
   发表时间:2011-01-10  
zhuixinjian 写道
public View getView(int position, View view, ViewGroup parent)

这个view你不能直接用???????


不太明白你说的指什么

能贴个例子  讲下效果?
0 请登录后投票
   发表时间:2011-01-18  
这样的做法对付静态的List还可以,如果是微博这样的应用,不停需要往List里面插入数据,就会出现问题了。
0 请登录后投票
   发表时间:2011-01-19  
stevevai 写道
这样的做法对付静态的List还可以,如果是微博这样的应用,不停需要往List里面插入数据,就会出现问题了。


每种处理都有自己的适用范围。 我已经表态了这样写对列表来回拖动的性能有重大提升。
0 请登录后投票
   发表时间:2011-03-28  
我判断那个东西convertView 也是用异步去做的,却不知道怎么回事出现很诡异的问题,图片总是变来变去的,能让getView不重复调用吗?
0 请登录后投票
   发表时间:2011-03-29  
这段代码里面创建ViewHolder是有问题的,在google IO上的本意是利用ViewHolder静态类的特性,避免创建对象影响性能,不知道哪个人改了这段代码。
0 请登录后投票
   发表时间:2011-04-01  
  个人感觉为什么getView 被调用了多次。是因为list在快速挂滑动时,有选择的进行了。失针操作。不知道我这么形容对不对。就是在快速滑动时 ondraw()并没有调用。

  好像appdome里有个很大的listview。是性能优化方面的例子。可以参考下。

  我继续找我的问题了。。。就是在textview用。获得某些字的坐标 Y 值
0 请登录后投票
   发表时间:2011-04-02  
这么意外,跟楼主用的是一样的方法。。。不过虚拟机都很卡,感觉不到有没有提升
0 请登录后投票
   发表时间:2011-04-13  
public class ViewHolder {
public TextView getTitle() {
if (title == null) {
title = (TextView) baseView.findViewById(R.id.title);
}
return title;
}
}

声明下:这里可能会违背 封装等规则,但是可以换来一些性能的提升,所以不建议去增加getter,setter.

google 上面的 关于holder的建议是:
public class ViewHolder {
TextView tv;
}
}


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();
}
holder.title.setText("xxxx");
}

根据goole的说明,主要是考虑到优化两个东西,一个是 减少inflate()执行的次数,实际就是减少new View的次数,建对象的次数.(因为view,对象复杂得多,比起holder来)
一个就是, 尽量少使用findViewById(). 至于这个函数执行开销,没有深究过,不知道里面具体是怎么实现的.只是 因为 google的建议....
0 请登录后投票
   发表时间:2011-04-18   最后修改:2011-04-18
你这种做法当然可以,用空间换时间的典型案例,在ListView中View个数确定且不大的情况下没问题。

Android标准的ListView和Adapter设计时,是考虑要重用Scroll出可视区域的View的,比如一个ListView中有1000项,可视区域只能显示20项时,按照Framework设计者的思路,是只需要inflate 20个View的,ListView中会把Scroll出可视区域的View放入RecycleBin,然后从RecycleBin中取出一个View作为convertView参数传给你。

iOS也是如此设计的。

当然现在的设备动辄500MB内存,其实你爱怎么做也没人管你。
0 请登录后投票
论坛首页 移动开发技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics