ArrayAdapter的getView()方法的说明

Mri*_*lla 21 java android android-arrayadapter android-listview android-adapter

你能解释一下这种getView()方法吗ArrayAdapter

我阅读了文档,它有三个参数:

  • position:项目在我们想要的视图的项目的数据集的位置.
  • convertView:如果可能的话,重用旧视图.注意:在使用之前,应检查此视图是否为非null且类型是否合适.如果无法转换此视图以显示正确的数据,则此方法可以创建新视图.
    异构列表可以指定其视图类型的数量,以便此视图始终是正确的类型(请参阅getViewTypeCount()和getItemViewType(int)).
  • parent:此视图最终将附加到的父级

我理解了position参数.就像他们说的那样,这意味着该项目的位置,已经请求了视图.

convertView来自哪里.我见过很多例子,他们检查是否convertView为null.如果is为null,则它们会对行布局的新实例进行膨胀,填充并返回它.我想我也已经知道了这一点,但还有一件事让我感到困惑.通过convertView参数传递的布局是什么.如果初始化时传入resource参数是ArrayAdapter?是返回的最后一个布局的缓存副本getView()

最后.什么是parent参数做.我没有看到太多利用它的例子.他们中的大多数只是重复/膨胀行布局并返回它.

(我问,因为我的点击动画在我的ListView.特别是这个旨在复制Spotify的下拉快速动作菜单.我的动画有点迟钝.在诊断了这个问题一段时间之后,我意识到这是因为我的getView()方法需要花费一些时间才能完成,因为我在每次迭代中都在为一个新的行布局充气.有人建议缓存行布局,ViewHolder其他一些例子指向重用convertView参数,即仅膨胀一个行布局如果convertView为null.)

Luk*_*rog 44

是getView()返回的最后一个布局的缓存副本?

convertView是一排屏幕左侧(所以它是不会被返回的最后一个视图的视图getView方法).例如,首先显示的列表,在这种情况下convertViewnull,没有行视图以前建成并离开屏幕.如果向下滚动,第0行将离开屏幕(将不再可见),当发生这种情况时,ListView可以选择将该视图保留在缓存中以便以后使用它(这是有道理的,因为ListView一般的行具有相同的行)只有数据不同的布局).将一些视图保留在缓存中并稍后使用它们的原因是因为该getView方法可以被调用很多次(每次用户向上/向下滚动并且新行出现在屏幕上).如果每次需要重新创建行视图时,这将导致创建许多对象,这是要避免的.在您的getView方法中,您将检查convertView它是否是null.如果是,null那么你必须构建一个新的行视图并用数据填充它,如果不是null,那就为ListView你提供了一个以前的视图.拥有此前一个视图意味着您不需要构建新的行布局,而是必须使用正确的数据填充它,因为该缓存视图仍然附加了旧数据(您将在stackoverflow上看到很多问题用户询问为什么他们的行在ListView向下滚动时会重复.)

parent参数的作用是什么.我没有看到太多利用它的例子.他们中的大多数只是重复/膨胀行布局并返回它.

它应该用于获得LayoutParams新膨胀/构建的行的正确性.例如,如果您将具有RelativeLayoutas作为根的布局充气并且不使用它parent来获取,则LayoutParams可能会对行布局产生一些问题.考虑到父母,您将使用:

convertView = getLayoutInflater().inflate(R.layout.row_layout, parent, false);
Run Code Online (Sandbox Code Playgroud)

  • 这是一个非常好的答案! (3认同)