为什么Android View API关心ArrayAdapter';什么是getViewTypeCount?

为什么Android View API关心ArrayAdapter';什么是getViewTypeCount?,android,android-listview,android-arrayadapter,recycle,Android,Android Listview,Android Arrayadapter,Recycle,我一直在学习如何创建自定义的ArrayAdapters,并熟悉了重写ArrayAdapter的getViewTypeCount和getItemViewType方法 为什么Android View API关心getViewTypeCount返回的“可能的视图类型数”?而且,作为程序员,我为什么要关心呢?In“每种类型表示一组可以在getView(int、View、ViewGroup)中转换的视图。” 如果视图不同,则它们不能与不兼容的其他视图一起循环使用。因此,如果此方法返回与1不同的任何内容,则

我一直在学习如何创建自定义的
ArrayAdapter
s,并熟悉了重写ArrayAdapter的
getViewTypeCount
getItemViewType
方法

为什么Android View API关心
getViewTypeCount
返回的“可能的视图类型数”?而且,作为程序员,我为什么要关心呢?

In“每种类型表示一组可以在getView(int、View、ViewGroup)中转换的视图。”


如果视图不同,则它们不能与不兼容的其他视图一起循环使用。因此,如果此方法返回与
1
不同的任何内容,则标准
onView
回收代码将不再有效

Commonware对您上一个问题的回答很好地解释了为什么您需要关心这些方法。下面是一个小例子:

您有一个包含100行和3种类型行的
列表视图

  • 一个简单的
    TextView
  • 自定义视图(非常复杂)
  • 模拟时钟视图
  • ListView
    的启动方式如下:

       //...
           if (convertView == null) {     
              // inflate views
           } else {
             //just use it    
       //...
    

    • 位置0:TextView我刚刚查看了Android源代码,查看了
      getViewTypeCount
      的具体使用位置。它位于abstract
      AbsListView
      class'internal
      RecycleBin
      class'
      setViewTypeCount
      方法中

      setViewTypeCount
      方法用于指定
      scrapViews
      ArrayList
      的初始大小。此
      ArrayList
      本身是
      ArrayList
      ArrayList
      ——每个“视图类型计数”一个

      此外,
      getViewTypeCount
      返回的值被分配给
      RecycleBin
      的成员变量
      mViewTypeCount
      。该成员用于控制RecycleBin类中的几个方法中只有一个或多个视图的情况下的回收逻辑(正如每个人都提到的)

      因此,我相信答案是,
      getViewTypeCount
      RecycleBin
      使用,这样它就知道它是否只有一个或多个视图需要处理。可以这么说


      (感谢大家打开我对回收利用的眼睛,并激励我阅读来源。)

      可能重复它的相关内容(我是两者的作者),但我选择将问题保持原子化/分离。要再次强调这个问题的重点,请意识到这个问题与回收利用或使用自定义视图无关——我是在问,“既然Android从getItemViewType中检索特定的视图类型,为什么它要知道/关心自定义视图的数量?”我真的很喜欢这种循环使用的解释。然而,这个答案与循环使用更相关。我的问题是,具体地说,为什么自定义视图的数量很重要,每个
      getViewTypeCount
      ?@ybakos:”具体地说,我的问题是,为什么每个getViewTypeCount的自定义视图数量很重要?”——这驱动了它维护以供回收的对象池的数量。欢迎您通过
      AdapterView
      代码筛选更多细节。