当前位置: 首页 > 面试题库 >

ArrayAdapter的getView()方法的说明

壤驷英叡
2023-03-14
问题内容

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

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

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

  • parent:该视图最终将附加到的父对象

我了解position参数。就像他们说的,这暗示着要求查看的项目的位置。

哪里convertView来的。我看过很多例子,它们检查是否convertView为null。如果为null,则将为行布局添加一个新实例,将其填充并返回。我想我也对此有所了解,但有一件事仍然使我感到困惑。通过convertView参数传递的布局是什么。如果是的resource是的初始化时传入的参数ArrayAdapter?是由返回的最后一个布局的缓存副本getView()吗?

最后。什么是parent参数做。我还没有看到太多利用此方法的示例。他们中的大多数人只是简单地重复/膨胀行布局并返回它。

(我之所以问是因为我的动画中有一个单击动画ListView。特别是这个旨在复制Spotify的下拉快速动作菜单的动画。我的动画有点呆滞。诊断了一段时间之后,我意识到这是由于我的getView()方法在每次迭代中增加新的行布局时需要花费一些时间来完成的,有人建议将行布局缓存,ViewHolder而其他示例则指向重用convertView参数,即仅对a行布局(如果convertView为null)。


问题答案:

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

convertView是一排屏幕左侧(所以它是不会被返回的最后一个视图的视图getView方法)。例如,首先显示该列表,在这种情况下convertViewnull,以前没有建立行视图并离开了屏幕。如果向下滚动,则第0行将离开屏幕(不再可见),发生这种情况时,ListView可以选择将该视图保留在缓存中以供以后使用(这很有意义,因为ListView通常行的行具有相同的视图)版式,仅数据不同)。之所以将某些视图保留在缓存中以供以后使用,是因为getView该方法可能被调用很多次(每次用户上下滚动并在屏幕上显示新行)。如果每次都需要重新创建行视图,这将导致创建许多对象,这是可以避免的。在您的getView方法中,您将检查convertView它是否为null。如果是,null
必须
构建一个新的行视图,并用数据填充它;如果不是null,则为ListView您提供了上一个视图。拥有此先前的视图意味着您无需构建新的行布局,而
必须
使用正确的数据填充它,因为该缓存的视图仍旧附着有旧数据(您会在stackoverflow上看到很多问题,其中用户问为什么他们的行ListView
在向下滚动时重复)。

父参数做什么。我还没有看到太多利用此方法的示例。他们中的大多数人只是简单地重复/膨胀行布局并返回它。

应该使用它来获得正确LayoutParams的新膨胀/建立的行。例如,如果您RelativeLayout将以a
为根的布局充气,而没有使用parent来获取LayoutParams,则行布局可能会出现一些问题。考虑到父母,您可以使用:

convertView = getLayoutInflater().inflate(R.layout.row_layout, parent, false);


 类似资料:
  • 问题内容: 有人可以告诉我参数在类的方法中用于什么吗? 这是从此处获取的示例代码: 我们应该经过什么? 我发现的是,从这里获取: 获取一个在数据集中指定位置显示数据的视图。您可以手动创建视图,也可以从XML布局文件中对其进行充气。当视图膨胀时,父视图(GridView,ListView …)将应用默认布局参数,除非您使用inflate(int,android.view.ViewGroup,bool

  • 这是我设置适配器的方式: 我正在寻找一个解决方案,从昨天开始,我已经阅读了所有关于StackOverflow的帖子,但没有一个与我的问题相匹配。所以我想知道,它是否可以来自LinkedHashMap<...> 编辑:这是我的布局r.layout.etat_piece_item

  • 方法调用'get view().findviewbyid(r.id.datePurchased)'可能会生成'java.lang.NullPointerException'

  • 本文向大家介绍JAVA String.valueOf()方法的用法说明,包括了JAVA String.valueOf()方法的用法说明的使用技巧和注意事项,需要的朋友参考一下 一、由基本数据型态转换成String String 类别中已经提供了将基本数据型态转换成 String 的 static 方法 ,也就是 String.valueOf() 这个参数多载的方法 有以下几种 (1)String.

  • 问题内容: 有人可以向我解释静态HashMap#hash(int)方法吗? 产生均匀分布的哈希的背后的理由是什么? 一个例子将使它更容易消化。 澄清 我知道运算符,真值表和按位运算。我只是无法真正解码实现,也无法真正评论。甚至是背后的原因。 问题答案: 是逻辑右移(无符号扩展)(JLS 15.19 Shift Operators ),并且是按位异或(JLS 15.22.1 Integer Bitw

  • 我在开发者android上找到了GridView guide:https://developer . Android . com/guide/topics/ui/layout/GridView . html "在getView()方法的末尾,传递给该方法的位置整数用于从mThumbIds数组中选择图像,该数组被设置为ImageView的图像资源。" 我对此感到困惑。 为什么我们每次都需要调用set