常见的写法是这样的:

@Override
            public View getView(int position, View convertView, ViewGroup parent) {
                ViewHolder viewHolder;

                if( convertView == null ) {
                    convertView = getLayoutInflater().inflate( R.layout.line, null );
                    ImageView imageView = (ImageView) convertView.findViewById( R.id.imageView );
                    TextView textView = (TextView) convertView.findViewById( R.id.textView );
                    viewHolder = new ViewHolder();
                    viewHolder.imageView = imageView;
                    viewHolder.textView = textView;
                    convertView.setTag( viewHolder );
                } else {
                    viewHolder = (ViewHolder) convertView.getTag();
                }

                viewHolder.imageView.setImageResource( R.drawable.ic_launcher );
                viewHolder.textView.setText( arr[ position ] + "");
                return convertView;
            }

但是可读性不好,convertView怎么会当成getView的返回值呢?所以以下是一种更好的写法:

@Override
            public View getView(int position, View convertView, ViewGroup parent) {
                ViewHolder viewHolder;
                if( convertView == null ) {
                    View view = getLayoutInflater().inflate( R.layout.line, null );
                    ImageView imageView = (ImageView) view.findViewById( R.id.imageView );
                    TextView textView = (TextView) view.findViewById( R.id.textView );
                    viewHolder = new ViewHolder();
                    viewHolder.imageView = imageView;
                    viewHolder.textView = textView;
                    view.setTag( viewHolder );
                    viewHolder.imageView.setImageResource( R.drawable.ic_launcher );
                    viewHolder.textView.setText( arr[ position ] + "");
                    return view;
                } else {
                    viewHolder = (ViewHolder) convertView.getTag();
                    viewHolder.imageView.setImageResource( R.drawable.ic_launcher );
                    viewHolder.textView.setText( arr[ position ] + "");
                    return convertView;
                }
            }

因为convertView只是指向一块内存区域,它保存着已显示过的View。只有ListView没超出屏幕时,convertView才为空。如果超出了,convertView就有东西了。

附:ViewHolder如下:

class ViewHolder {
        TextView textView;
        ImageView imageView;
    }

  

ListView的另一种可读性更强的ViewHolder模式写法的更多相关文章

  1. web前端开发培训和自学 哪种选择更适合你

    web前端相对于其他软件开发是比较容易入门的,但是如果深入学习就比较困难了,这门技能需要从业人员掌握一定的设计.代码.交互技能和一些SEO技能,容易入门还涉及这么多知识和技能,那学习web前端开发到底 ...

  2. Java四种引用包括强引用,软引用,弱引用,虚引用。

    Java四种引用包括强引用,软引用,弱引用,虚引用. 强引用: 只要引用存在,垃圾回收器永远不会回收Object obj = new Object();//可直接通过obj取得对应的对象 如obj.e ...

  3. RAID5和RAID10,哪种RAID更适合你(上)

    [IT168 专稿]存储是目前IT产业发展的一大热点,而RAID技术是构造高性能.海量存储的基础技术,也是构建网络存储的基础技术.专家认为,磁盘阵列的性能优势得益于磁盘运行的并行性,提高设备运行并行度 ...

  4. 阅读:RAID5和RAID10,哪种RAID更适合你

    阅读:RAID5和RAID10,哪种RAID更适合你-------------------------------------------2013/10/06 存储是目前IT产业发展的一大热点,而RA ...

  5. 构建可读性更高的 ASP.NET Core 路由

    原文:构建可读性更高的 ASP.NET Core 路由 一.前言 不知你在平时上网时有没有注意到,绝大多数网站的 URL 地址都是小写的英文字母,而我们使用 .NET/.NET Core MVC 开发 ...

  6. 更强的 JsonPath 兼容性及性能测试

    更强的 JsonPath 兼容性及性能测试 最近给自己的json框架snack3添加了json path支持.搞好之后,找了两个市面上流行框架比较性测试,以助自己改进框架的性能和兼容性. 测了一圈之后 ...

  7. 转载:RAID5和RAID10,哪种RAID更适合你

    转自 http://storage.it168.com/h/2007-06-28/200706281204046_3.shtml 存储是目前IT产业发展的一大热点,而RAID技术是构造高性能.海量存储 ...

  8. SOLOv 2:实例分割(动态、更快、更强)

    SOLOv 2:实例分割(动态.更快.更强) SOLOv2:  Dynamic, Faster and Stronger 论文链接: https://arxiv.org/pdf/2003.10152. ...

  9. Java中四种引用:强、软、弱、虚引用

    这篇文章非常棒:http://alinazh.blog.51cto.com/5459270/1276173 Java中四种引用:强.软.弱.虚引用 1.1.强引用当我们使用new 这个关键字创建对象时 ...

随机推荐

  1. HTML的实际演练1

    1.HTML介绍 一个网站的建立都是HTML的,例如大家可以打开F12就可以看到浏览器的一个开发者模式,就可以看到网页的源代码了: 当然这网页他有很多的标签编写组成的,有的显示文字,段落,有的是个超链 ...

  2. python没有switch,可以用字典来替代

    python没有switch,是因为可以用字典来替代,具体方法如下: def add(x,y): print(x+y)def subtraction(x,y): print(x-y)def multi ...

  3. gorm中数据库datetime类型的映射和time.Time的格式化

    如果在结构体中设置time变量的类型是time.Time,那么gorm取出来的时间格式将会是”2006-01-02 15:04:05.999999999 -0700 MST“东八区时间,在time.T ...

  4. 源码包的解压 .tar.gz /.tar.bz2的解压

    解压方式如下: .tar.gz     格式解压为          tar   -zxvf   xx.tar.gz .tar.bz2   格式解压为          tar   -jxvf    ...

  5. 指针c艹

    #include <iostream> using namespace std;int value=1;void func(int *p){ p=&value; }void fun ...

  6. metasploit 利用MS08-067渗透攻击xp系统全过程

    工具:metasploit,目标系统 windows xp sp3 English 渗透攻击过程 1.search MS08-067 2. use  exploit/windows/smb/ms08_ ...

  7. web前端js 实现打印操作

    转载来源:https://www.cnblogs.com/potatog/p/7412905.html 一.打印当前页面指定元素中的内容 方式一:直接使用window.print(); (1)首先获得 ...

  8. pkg_config找不到库

    解决方法 假设libavutil默认安装时libavutil.pc安装到了 /usr/lib64/lib/pkgconfig/ 中,而 echo $PKG_CONFIG_PATH 结果中没有这个路径, ...

  9. IPEndPoint

    .NET框架用IPEndPoint 对象来表示一个特定的IP地址和端口的组合,应用该对象的场景多是在讲socket绑定到本地地址或者将socket绑定到非本地地址.

  10. [SoapUI] Command-Line Arguments

    https://support.smartbear.com/readyapi/docs/soapui/running/automating/cli.html Use the test runner t ...