您的位置:首页 > 移动开发 > Android开发

android ListView的优化之 static ViewHolder

2013-07-21 22:45 567 查看
关于如何写出高效的ListView,我就不写了官方和网上都有很多的例子了。

我这里要记录的是为什么ViewHolder这个类的修饰符是static的?难道就不能是非static的吗?

为了解决这个问题,网上搜了不少资料。最后的还是归结到了Java的语法上(基础不够扎实啊,正好补补了)。

那就是内部类和静态内部类的区别。。。。。。。。。。。。

例:

class OuterClass {
...
static class StaticNestedClass {
...
}
class InnerClass {
...
}
}

以上面的例子讲述,


内部类:

InnerClass是一个内部类,该内部类是外部类OuterClass的一个成员。该InnerClass可以在该外部类内访问它的成员变量,即使是被private修饰的变量。而StaticNestedClass是一个静态内部类,它则不能访问OuterClass的成员变量。InnerClass作为OuterClass的一个成员,可以被任何访问修饰符所修饰。但是记住,外部类OuterClass只能被public或者默认的包访问符修饰。

静态内部类:

StaticNestedClass 这个静态内部类无法直接访问外部类OuterClass的任何方法或者变量,
只能通过外部类对象的引用才可以访问它们。

那么为什么要使用内部类呢?
有以下三个主要的原因:

It is a way of logically grouping classes that are only used in one place.
当某个类只被一个类使用时,将该类嵌在另一个类的内部保持两个类一起在一个文件中也是很合乎逻辑的。
另外,这样将类内嵌进来也是一种对包的精简,因为不必在外新建文件。

It increases encapsulation.
增强了封装性,对外界来说是透明的。

Nested classes can lead to more readable and maintainable code.
增强代码的可读性和可维护性。

分割线=======================================================
回到本文的标题,在写ListView优化中,ViewHolder的作用只是保存TextView,ImageView等对象的引用,
避免多次调用昂贵的findViewById(),而完全不需要访问到外部类的成员变量和方法,因此用 static修饰该类即可。


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: