-
是持有者的类,里面一般没有方法,只有属性,角色是临时存储的,保存每次拿到视图方法返回的视图,下次就可以用了。这样做的好处是,您不必每次都去布局文件来获取视图,从而提高了效率。 我不知道我是否明白我在说什么,希望
-
怎么用,哈哈我真的不知道怎么用。 ViewHolder 是 Google 在 13 年内推出的一个类,旨在提高 ListView 适配器的效率,并优化**,避免每次都要创建**。 我只见过它在适配器中使用,在适配器中创建它,定义一些控件,其中的逻辑,然后调用它。
-
1.标记一些信息,这样说可能太抽象了,然后我说,你看过@override,@suppresswarnings等,这种注释是用来识别的,可以作为一些测试。
2.运行时动态处理,我们最应该看到的,在运行时获取类的类对象,然后遍历它的方法和变量,判断是否有注解语句,然后做一些事情。 与上面三篇博文中的类似。
3.编译时的动态处理,这个怎么样? 就是我们今天的主角,一般这种注解会在编译的时候进行编译,根据注解的标识,动态生成一些类或者生成一些xml就可以了,在运行时,这种注解是不是依靠动态生成的类来做一些操作,因为没有反射,效率和直接调用方法没什么区别
关于3,你不懂,没关系,下面我就详细说说,使用这种注解的项目有:ParcelableGenerator、Butterknife、AndroidAnnotaion等。
-
RecyclerView 是一组新的视图,旨在为任何基于适配器的视图提供类似的呈现。 它在最新的 support-v7 版本中受支持,作为 ListView 和 GridView 控件的后继者。
RecyclerView 在开发时考虑到了可扩展性,因此它可用于创建任何可以想象的布局。 但是,使用起来也有点不方便。 这就是 Android——完成工作并不总是那么容易。
如果使用 RecyclerView,则需要了解以下三个元素:
layoutmanager
itemanimator
RecyclerView 包括一种新型适配器。 它类似于我们现在使用的适配器,但也略有不同,就像它需要使用视像器一样。 使用它时需要覆盖两种主要方法:
一个用于表示视图及其持有者,而另一个用于将数据绑定到视图。 这样做的好处是,只有当我们真正需要创建一个新视图时,才会调用第一个方法,并且我们不需要检查它是否已经是**。
layoutmanager
此类确定视图在框架中的位置,但这只是其众多职责之一。 它管理滚动和回收。
LayoutManager 只有一个名为 LinearLayoutManager 的实现类,它有 1500 多行。 但是从这一点可以看出它有多复杂。 经理可以模拟横向和纵向列表视图,但没有页眉和页脚。
为 LayoutManager 编写子类并不适合初学者,我们需要依靠社区来挖掘 RecyclerView 的全部潜力。 除了此示例之外,我稍后将上传 gridview 控件的实现。
我认为这背后的关键是创建一个以 LinearLayoutManager 的 ** 为模型的 BaseLayoutManager,并在此基础上进行扩展。 也许 support-v7 的最终版本将提供更多更好的实现。
itemanimator
Itemanimator 根据适配器上收到的通知对视图组的修改进行动画处理。 基本上,它会自动显示条目动画的添加和删除。 它也不是一个简单的类,但我们发现 defaultitemanimator 已经工作得很好了。
-
在主程序中编写一个**,并在适配器中侦听。
-
房东想说的应该是 aapter 中经常使用的 viewholder,这个类的名称是自定义的,它的功能是在 getview() 中使用。 之所以有这个类,是因为比如在列表中,每个项目都有相同的图层,所以每次getview的时候,都需要反复找,这样就可以定义一个类,比如viewholder,保存项目图层的每个视图对象,方便复用。 提高程序的效率。
-
没有这样的类,它通常由它自己定义。
-
如果不使用 ViewHolder,ListView 效率低下。 如果负载数过大,内存会一点一点地消耗,直到抛出 OOM。 开始异步加载时会出现错位问题,然后逐一检查支架中的地址与**匹配的信息,并在异步加载功能中将其替换回去。
避免图标错位,并在异步加载成功后替换它们。
imageview imageview = imageview) ;
if(imageview !=null)
上面的键**解决了**错位的问题。
下面是 getView() 方法。
public view getview(int position, view rowview, viewgroup parent)else
设置 listview 的值。
避免图标错位,并在异步加载成功后替换它们。
if(null ==
elsereturn
rowview;
静态类 viewholder,但是为什么 viewholder 被设计成静态类型,我一直没有弄清楚。我在网上查了一些信息,但我找不到说服我的理由。 也有人说,保存记忆,保持对象的唯一性,说保留**不乱,但我觉得不是很靠谱。
今天我尝试去除静电并像往常一样运行它,我没有感觉到与以前有任何不同。 后来我查了一下静态类的一些特性,首先viewholder是一个内部类,如果是静态类,就不需要依赖外部类的对象了。 这意味着只有静态内部类的成员变量可以声明为静态,如果内部类不是静态的,则无法声明静态成员变量。
我想知道静态内部类的这个特性是否对设计人员有吸引力? 如果有人知道这一点,请随时提出建议。
-
i 和 position 是一回事,它们可以在任何数据结构中使用,它们只是表示一个变量名称。
如果在匿名类中使用 i 时遇到错误,请在 int i 之前添加 final。 也就是说,最后的 int i 用于 onbindviewholder 方法的参数。