- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
你能解释一下 ArrayAdapter
的 getView()
方法吗?
我阅读了文档,它有三个参数:
position
:适配器数据集中item的位置我们想要其 View 的项目。 convertView
:如果可能的话,要重用的旧 View 。注意:在使用之前,您应该检查此 View 是否为非空且类型合适。如果无法将此 View 转换为显示正确的数据,此方法可以创建一个新 View 。parent
:此 View 最终将附加到的父级我了解 position
参数。就像他们说的,它暗示了请求查看的项目的位置。
convertView
是从哪里来的。我见过很多例子,他们检查 convertView
是否为空。如果 is 为 null,它们会扩充行布局的新实例,填充并返回它。我想我也明白了这一点,但有一件事仍然让我感到困惑。通过 convertView
参数传入的布局是什么。是如果 the resource
parameter that is passed in when initialising the ArrayAdapter
?是 getView()
返回的最后一个布局的缓存副本吗?
最后。 parent
参数有什么作用。我还没有看到太多使用这个的例子。他们中的大多数只是简单地重用/扩充行布局并将其返回。
(我之所以问,是因为我的 ListView
中有一个点击动画。特别是 this one that aims to replicate Spotify's dropdown quick action menu。我的动画有点迟钝。在诊断了这个问题一段时间后,我'已经意识到这是因为我的 getView()
方法需要一些时间才能完成,因为我在每次迭代中都会增加一个新的行布局。有人建议将行布局缓存在ViewHolder
而其他示例指向重用 convertView
参数,即仅在 convertView
为 null 时膨胀行布局。)
最佳答案
Is is a cached copy of the last layout returned by getView()?
convertView
是离开屏幕的行的 View (因此它不是 getView
方法返回的最后一个 View )。例如,首先显示列表,在这种情况下 convertView
是 null
,之前没有构建任何行 View 并离开屏幕。如果向下滚动,第 0 行将离开屏幕(不再可见),当发生这种情况时,ListView
可能会选择将该 View 保留在缓存中以供以后使用(这是有道理的,因为ListView
的行通常具有相同的布局,只有数据不同)。将一些 View 保留在缓存中并稍后使用它们的原因是因为 getView
方法可能会被调用很多次(每次用户向上/向下滚动并且屏幕上出现新行时)。如果每次都需要重新创建行 View ,这将导致创建大量对象,这是需要避免的。在您的 getView
方法中,您将检查 convertView
以查看它是否为 null
。如果它是 null
,那么您 必须 构建一个新的行 View 并用数据填充它,如果它不是 null
,则 ListView
为您提供了以前的 View 。拥有这个先前的 View 意味着您不需要构建新的行布局,而是您必须用正确的数据填充它,因为缓存的 View 仍然附加旧数据(您会看到很多关于 stackoverflow 的问题,用户会问为什么他们的 ListView
的行在向下滚动时会重复)。
What does the parent parameter do. I haven't seen too many examples utilising this. Most of them simply reuse/inflate a row layout and return it.
它应该用于为新膨胀/构建的行获取正确的 LayoutParams
。例如,如果您对具有 RelativeLayout
作为根的布局进行膨胀,并且您不使用 parent
来获取 LayoutParams
您可以行布局有一些问题。考虑到 parent ,你会使用:
convertView = getLayoutInflater().inflate(R.layout.row_layout, parent, false);
关于java - ArrayAdapter 的 getView() 方法说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12400338/
要更新 Listview 我们可以做以下两件事: 1) 创建一个新的ArrayAdapter,并在每次更新数据时将其绑定(bind)到ListView。 this.listView.setAdapte
基本上我所拥有的是一个显示 ListView 的 fragment 。它目前使用 ArrayAdapter。但是,我正在尝试扩展 ArrayAdapter 以制作我自己的自定义适配器。然后,当我更改代
这真的很奇怪。 当我为 ListView 使用标准 ArrayAdapter 时,调用 setItemChecked 工作正常 但是当使用定制的 ArrayAdapter 时它不会。 原因是什么?这是
我想在我的 android 应用程序中使用 AutoCompleteTextView。我知道如何将它与简单的字符串数组一起使用,但我希望 AutoCompleteTextView 使用对象列表来执行完
问题总结:adapter和spinner都在Spinner Activity中。一旦用户选择了一个名字,它就会将它们发送到主 Activity 。我想从另一个 Activity 中调用 ArrayAd
lang.NullPointerException android.widget.ArrayAdapter.init(ArrayAdapter.java)只是将 Arraylist 值添加到 cust
在开发 Android 应用程序时,我从类似于“Item 1”、“Item 2”、“Item 3”的网站上得到了一行响应我需要将这一行转换为一个列表,以便在 simplelistitem 的数组适配器
您好,我如何检查复选框是否已选中,以及是否已选中我怎样才能删除有问题的行?谢谢你 数组适配器: public class Todoadapter extends ArrayAdapter {
https://developer.android.com/guide/topics/ui/declaring-layout#FillingTheLayout 在这些文档中,我们有以下代码 fragm
我有一个填充数据“neededRepData”的列表,我正在尝试将此列表添加到我的适配器中,但遇到了问题。下面是我的 Reps 类和我的方法(来自另一个类)来迭代所需的 RepData。 public
拥有可以处理多种对象类型的数组适配器的最佳实践是什么? Adapter extends ArrayAdapter 我有 3 种类型的类(class) A.class , B.class , C.cla
我正在制作一个将 JSON 数据解析为 ListView 的应用程序。这对我不起作用;它没有给我任何数据。 这是我的代码: public class MainActivity extends AppC
我有一个 Activity 从另一个 Activity 加载sharedPreference,并从当我编译我的应用程序时,使用 arrayAdpter 将 sharePreferenece 放入 li
我尝试使用 arrayAdapter 自定义将图像和文本加载到 ListView,但加载图像失败 这是我的数组适配器 public class CustomAdapter extends ArrayA
我在使用我的应用程序时遇到问题。我刚刚开始开发该应用程序,到目前为止只花了大约 15 个小时。但我遇到了障碍。通常我可以用谷歌搜索障碍,我的大部分答案都来自这个论坛! 所以我希望我能找到解决方案。下面
我之前曾用其他适配器(如 SimpleAdapter)问过这个问题,但简单适配器的解决方案不适用于 ArrayAdapter。在 SimpleAdapter 中,我获得了屏幕宽度和高度,然后将其传递给
我有 3 个类(class),我希望使用自动完成文本框向用户显示来自 Web 服务(rest api)的某些数据(又名城市)。我已经在我自己的应用程序的各种功能上使用了这个实现,但是由于某种原因,te
我正在从 Google App Engine 获取字符串形式的数据,因此我必须在一个线程中执行此操作。接下来我想在 ListView 中显示它,我正在尝试执行类似以下代码的操作: public voi
我有一个带有自定义 ArrayAdapter 的 ListView ,它设置在一个 fragment 中。仅设置 ListView 中的第一行。 这可能是一般使用带有 fragment 的 ListV
我正在尝试修改 MyKong 中的代码,添加一些更改 TextView 字体的行,但是当我尝试运行时遇到强制关闭。 这里是 MobileArrayAdapter.java > package com.
我是一名优秀的程序员,十分优秀!