繁体   English   中英

什么是Android适配器中的转换视图

[英]What is convert view in adapters Android

我想知道什么是转换视图? 我了解是

尽可能重用旧视图。 注意:使用前,您应检查此视图是否为非null并具有适当的类型。 如果无法转换此视图以显示正确的数据,则此方法可以创建一个新视图。 异构列表可以指定其视图类型的数量,以便此View始终具有正确的类型(请参见getViewTypeCount()和getItemViewType(int))。

这到底是什么?
只是早期的简单观点膨胀了吗? 还是其他?

为什么我们不能这样使用它?

if (convertView!=null) {
   return convertView;
}
else {
   return new ......
}

为什么我们必须使用setTag方法设置对膨胀视图的引用?

convertView.setTag(holder);    

我们将一个视图的另一个视图引用设置为TAG,为什么不直接将其作为convertView传递呢?
请帮助解决这个问题,因为无法理解,我无法编写任何代码。

在引擎盖下,您会看到它只会放大视图几次(足以填满屏幕),因为这确实很慢。 就像您说的那样,重复使用它先前夸大的视图。 滚动时,它只是告诉您需要使用适合当前位置的数据填充之前的展开视图。

实际上,您总是可以每次返回一个新的视图,但是通过滚动平滑度,这将对您的性能产​​生负面影响。

使用setTag告诉您记住保存有关视图本身信息的对象(称为ViewHolder )。

这到底是什么? 只是早期的简单观点膨胀了吗? 还是其他?

两者都是。 特别是您膨胀类型的视图数组。 此数组的大小等于足以完全填满屏幕的视图数。 这样,您只能分配恒定数量的视图。

为什么我们不能这样使用它?

if (convertView!=null) {
   return convertView;
}
else {
   return new ......
}

您仍然需要用数据集的数据填充视图。 在您上面发布的摘录中,您没有这样做。 你可以做类似的事情

if (convertView!=null) {

   // convertView.findVIewById(...)
   // set data to view
   return convertView;
}
else {
   convertView =  new ......
   // convertView.findVIewById(...)
   // set data to view
   return converView;
}

为什么我们必须使用setTag方法设置对膨胀视图的引用?

它称为ViewHolder模式,您没有设置膨胀视图,而是一个包含膨胀视图组件的小对象。 这样,您可以避免每次调用getView时都想调用findViewById并且您想用数据集的内容(在位置处)填充视图

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM