【问题标题】:What is convert view in adapters Android什么是适配器 Android 中的转换视图
【发布时间】:2015-08-05 12:08:27
【问题描述】:

我想知道什么是转换视图?我明白是

如果可能的话,要重用的旧视图。注意:你应该检查这个 view 在使用前是非空的并且是合适的类型。如果不是 可以转换此视图以显示正确的数据,此方法 可以创建一个新视图。异构列表可以指定它们的数量 视图类型,因此此视图始终是正确的类型(请参阅 getViewTypeCount() 和 getItemViewType(int))。

引擎盖下面是什么?
只是之前膨胀的简单视图吗?还是别的什么?

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

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

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

convertView.setTag(holder);    

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

【问题讨论】:

    标签: android performance android-listview android-view android-recyclerview


    【解决方案1】:

    在幕后,您会看到它只会使视图膨胀几次(足以填满屏幕),因为这真的很慢。正如您所说,重用了之前夸大的视图。当您滚动时,它只是告诉您需要使用适合当前位置的数据填充较早的膨胀视图。

    实际上,您每次都可以返回一个新的视图,但这会对您的性能产​​生负面影响,并且滚动平滑度也会受到影响。

    setTag 告诉它记住保存视图本身信息的对象(称为ViewHolder)。

    【讨论】:

      【解决方案2】:

      引擎盖下面是什么?是否只是简单的视图膨胀较早 ?还是别的什么?

      两者兼而有之。特别是您夸大的类型的视图数组。该数组的大小等于足以填​​满屏幕的视图数量。这样您只分配固定数量的视图。

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

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

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

      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 并且您想用数据集的内容(在位置)填充视图

      【讨论】:

        猜你喜欢
        • 2018-12-06
        • 2011-04-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-04
        相关资源
        最近更新 更多