看网上的用例 大都是 static的 static class ViewHolder {
TextView text;
ImageView icon;
}
必须是static 吗? 还是在这用static有特殊的作用?
TextView text;
ImageView icon;
}
必须是static 吗? 还是在这用static有特殊的作用?
解决方案 »
- 怎么把android的源程序导入到Eclipse中
- 编译android源码(CM)时,出现AsynchronousSocketCloseMonitor.cpp:34:49: 错误: 类型‘int’的标量初始化带
- android:如何做到点击链接,自己的程序可以响应?
- intent用于两个不同工程下的activity时报错
- android 屏保问题
- 兄弟姐妹们,谁知道我这个ANDROID本地解析XML的程序哪错了?
- Android4.2 把资源文件放到src目录下面
- 如何下载android4.4相匹配的widevine?
- 学习android的新手,在做例子中不断前行,感谢大家给我帮助,这里遇到了一个问题,恳请各位大哥大姐指教!
- 求助!一个对齐的问题!
- ActionBar的问题
- googlemap开发 始终出不了地图界面
哥们 可否说的详细点? 比如下面这例子?
我看网上好多都是这么写的 还有怎么搞 头像就不会错乱了? 谢谢啊
static class ViewHolder {
TextView text;
ImageView icon;
}public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.list_item_icon_text,
parent, false);
holder = new ViewHolder();
holder.text = (TextView) convertView.findViewById(R.id.text);
holder.icon = (ImageView) convertView.findViewById(R.id.icon);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.text.setText(DATA[position]);
holder.icon.setImageBitmap((position & 1) == 1 ? mIcon1 : mIcon2);
return convertView;
}
静态内部类随父类本身存在,不依赖父对象
而且Google官方文档的demo里就是这样写的,对象肯定不是唯一,私以为是为了提高效率,快速滑动的时候不会很难受
使用静态,是保证holder = new ViewHolder();时不会重新分配内存空间,节省内存
holder = new ViewHolder();不会跑很多次,重新不重新分配必要性不大holder = (ViewHolder) convertView.getTag();多次执行的是这个,holder引用每次都会指向一块新的内存
说错了,指不指向新的内存由holder=后边的代码而定,跟楼主问的static没关系
我的理解是:
ViewHolder holder = new ViewHolder()
每次都是在stack中开辟一块内存保存 holder的地址 然后在heap中 分配ViewHolder的内存哥们的意思是
ViewHolder 设置成static的 他就会保存到 stack中吗? 还是。。?
但是因为多个引用指向同一对象,一个引用操作的对象时,另一个引用也可能在操作,所以同时操作时就可能导致谁也得不到期望的结果,异步加载图片造成错位,几乎是因为这个原因
就以lz的代码为例吧,再getView时,设置文字的同时,同时将图片设置成默认图片(因为是多个引用共用一个对象,所以不设置的话,这张图片就会是上一次设置的图片),同时加载完成后,一定要找到图片正确的位置,如果位置不对,异步加载完成后就会出现在最新的一个图片控件上了,而其他位置可能就会是默认图片(还是多个引用指向一个对象的原因)。
除非listview只有一条记录?这和对象唯一有什么关系呢,ViewHolder里面放的是控件,控件之上才是放list数据,正因为list中每个item的控件是一样的,才会使用这个static.就好像大箱子装小箱子,小箱子再装东西,大箱子永远只有一个,但不影响小箱子和东西到底有多少是不受大箱子影响的。
static关键字的确是我理解错误了,还说得这么肯定……对不住大家。
比如外部使用该内部类,可以避免实例化内部类所在的类,是这样不?