我只是想更好地理解我经常用来优化ListView的下列模式

我的读物只是指出了静态内部类被视为顶级类的事实。 与类成员(非静态)相比,这样的事情有什么好处?@Override public View getView(int position, View convertView, ViewGroup parent) { Comment comment = getItem(position); ViewHolder holder; if (convertView == null){ holder = new ViewHolder(); convertView = LayoutInflater.from(context).inflate(R.layout.mylayout, null); holder.nickname = (TextView) ((ViewGroup) convertView).findViewById(R.id.nickname); convertView.setTag(holder); }else{ holder = (ViewHolder) convertView.getTag(); } holder.nickname.setText(comment.getMember_nickname()); CharSequence return convertView; } public static class ViewHolder{ TextView nickname; }

使用静态内部类的一个好处是内部类可以从静态方法访问,而不需要外部类的实例。

如果内部类是非静态的:

class MyOuter { private int x = 7; public void makeInner() { MyInner in = new MyInner(); in.seeOuter(); } class MyInner { public void seeOuter() { System.out.println("Outer x is " + x); } } } public static void main(String[] args) { MyOuter mo = new MyOuter(); MyOuter.MyInner inner = mo.new MyInner(); inner.seeOuter(); }

如果内部类是静态的:

class BigOuter { static class Nest {void go() { System.out.println("hi"); } } } class Broom { static class B2 {void goB2() { System.out.println("hi 2"); } } public static void main(String[] args) { BigOuter.Nest n = new BigOuter.Nest(); n.go(); B2 b2 = new B2(); b2.goB2(); } }

我的意见是最好有ViewHolder类静态,因为它不会泄漏适配器。

如果适配器保留了一些沉重的集合甚至视图(取决于每个特定的情况),保持控制哪些对象保留适配器将是非常好的。

拥有大量的内部类的对象实例将有这些对象引用适配器,从而保留它。 你应该小心如何pipe理标签(如果视图被清除/自动删除没有问题>)。

android viewholder模式,为什么在ViewHolder模式中ViewHolder类应该是静态的?相关推荐

  1. android编译会生成class吗,请教下Android N混合编译生成的base.art中的类在运行时最终添加到哪个classloader的问题...

    您在Android N混合编译与对热补丁影响深度解析一文提到,为了规避混合编译带来的影响,采用运行时替换PathClassLoader方案,因为App image中的class是插入到PathClas ...

  2. Android开发中ViewHolder模式的复用写法一劳永逸哦

    今天给大家分享一个很实用的ViewHolder中的写法.这个大家肯定写adapter的时候是基本都会写的,主要是用来缓存控件,优化加载的效率. 很多时候,我们都是自定义一个adapter,然后继承Ba ...

  3. android 多线程断点下载,listview 模式 开始 暂停等功能

    android 多线程断点下载,listview 模式 代码依次如下: 布局: <?xml version="1.0" encoding="utf-8"? ...

  4. Android系统移植与调试之-------如何修改Android设备添加重启、飞行模式、静音模式等功能(一)...

    1.首先先来看一下修改前后的效果对比图 修改之后的图片 确认重启界面 具体的修改内容在下一篇中具体介绍. Android系统移植与调试之------->如何修改Android设备添加重启.飞行模 ...

  5. android系统动态切换输入法,一种动态切换Android系统输入法的弹出模式的方法与流程...

    技术特征: 1.一种动态切换Android系统输入法的弹出模式的方法,其特征在于,包括步骤如下: (1)初始状态下,即软键盘和表情面板都未展开时,为表情面板设置一个默认高度,默认高度的取值范围是230 ...

  6. Android初级开发笔记-- activity启动模式的学习(1)

    第一次学习Android中一个很重要的概念,启动模式.文章记录的也只是一些入门知识,随着学习的深入还会有activity启动模式的学习(2)和(3). 下面分三个小点说一下对启动模式的理解区别以及如何 ...

  7. Android TimePickerDialog样式配置与TimePicker模式选择

    习惯性的,把要说的内容先总结一下: TimePicker有两种模式:spinner 和clock,可通过如下方式配置: <TimePickerandroid:timePickerMode = & ...

  8. Android Activity:四种启动模式,Intent Flags和任务栈(转自他人博客)

    在Android中每个界面都是一个Activity,切换界面操作其实是多个不同Activity之间的实例化操作.那各个页面跳转关系如何决定呢?如果启动了顺序启动了ABCD的Activiy,如何从D调回 ...

  9. Android Activity的4种启动模式详解(示例)

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/5233269.html 先介绍下Android对Activity的管理,Android采用Task来管理多个A ...

  10. Android使用的设计模式2——策略模式

    今天讲解一下策略模式,策略模式也是很常用的设计模式,对多种算法或者数据结构选择使用的情况下,经常会使用策略模式来管理这些算法.下面会简单讲解一下策略模式的概念和基本实现.然后结合Android里面的实 ...

最新文章

  1. [BI基础] ( 商务智能 ) 简介
  2. C++中一些类和数据结构的大小的总结
  3. 冲销已过账外向交货单
  4. pacman安装ubuntu_为什么tensorflow用户宁可ubuntu繁琐步骤搭建环境,也不用一条命令直达的manjaro?...
  5. NServiceBus教程-消息传递与处理
  6. [SDOI2011]染色
  7. nginx可以负载均衡多个tomcat,nginx主机挂了怎么办?Keepalived
  8. 假如购买的期房不小心烂尾了,那银行贷款是否可以不还了?
  9. cv2 画多边形不填充_你不知道的4种方法:python方法绘制扇形
  10. SM4国密标准 GB/T 32907-2016
  11. 硬盘是办公设备还是计算机设备,机械硬盘价格与区别【详细介绍】
  12. 对搜狐、网易和TOM三大门户网站的SQL注入漏洞检测
  13. pandas 的数据结构Series与DataFrame
  14. linux操作系统原理【3】
  15. html5json转换为数组,Json转数组 在线
  16. Python文件去重代码
  17. 五线谱中蕴含的数学问题
  18. 现在win7系统还能升级win10系统吗?win10系统怎么重装?
  19. 非对称加密之公钥密码体系 【五】
  20. 【Hyper-V】Windows10家庭版安装Hyper-V虚拟机

热门文章

  1. AirServer Mac Airplay投屏工具
  2. c语言试题答题卡,c语言题目及答题卡.docx
  3. freebasic 编译linux,FreeBasic(basic语言编译器)0.90.1官网版
  4. Ubuntu学习笔记(2)---安装LumaQQ
  5. 小程序框架kbone与Hybird混合开发
  6. php令牌桶,令牌桶限频(TokenBucket)
  7. 红帽子linux装mysql_红帽学习之Linux安装
  8. IE浏览器右下角小广告怎么去除
  9. OpenLayers 6 实现仿Echarts风格的动态迁徙图/航班图
  10. 社交网络中常用数据集