问题标签 [android-arrayadapter]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - 对于从后台线程定期更新并在多个活动中维护的 ListView 有什么好的方法?
首先是我正在寻找的一些背景信息和参数。
- 该应用程序有几个需要访问单个列表的活动。我正在使用Application类来在所有活动中维护此列表。
- 该列表是自定义对象的列表。
- 有一个活动有一个 ListView 来显示此列表中的项目。
- 还有其他活动需要能够访问此列表,但不显示 ListView。
- 可以对列表进行排序或过滤。
- 可以随时从后台线程更新(添加、删除、更新内容)列表,这些更改应在查看列表时立即反映。
到目前为止,我的方法是通过应用程序中的方法管理列表,包括管理列表的任何更新。如果用户当前在具有 ListView 的 Activity 中,则它正在侦听列表的更新。当它听到更新时,它会从应用程序复制列表并将其发送到 ListViews 自定义 ArrayAdapter。ArrayAdapter 获取此列表副本并替换基本列表,在其上调用当前排序和过滤器,然后替换实际显示在列表中的列表并调用notifyDataSetChanged()
. 这一切都是为了避免如果列表从 UI 线程更改或没有notifyDataSetChanged()
调用,适配器将遇到任何问题。
这一切都很好,问题是使用这种方法有同一个列表的多个副本,这会降低该列表在其他地方的可用性并创建不需要的内存使用。如果在某个时间间隔内有大量更新,它也可以创建大量复制。
所以我想看看是否有其他人有任何方法可以允许 ListView 直接引用主列表源但仍然避免从 UI 线程更新问题?
谢谢
android - Android 开发 - 使用 ArrayListvs 带有 ArrayAdapter 的字符串数组
我是 Android 开发的新手,我对 Commonsware 的“The Busy Coder's Guide to Android Development”中的一段摘录有疑问。有一个例子,它正在构建一个扩展 ListActivity 的类,并展示了通过上下文菜单从列表中删除和删除的能力。在使用列表的字符串源设置 ArrayAdapter 之前,文本说要将 String 数组转换为 ArrayList 类型,因为“我们希望能够动态更改列表的内容,这就是很多如果您使用 ArrayList 而不是普通的 String 数组,则更容易”
如果我们使用 ArrayList 或 String 数组直接操作列表,我理解这个概念,但是如果我们使用 ArrayAdapter.add/insert/remove 方法,这有什么关系呢?一旦创建了 ArrayAdapter(以及我从该 .java 文件中了解到的内容),它将源数据转换为 List 对象,无论它来自数组还是 ArrayList。
我在创建适配器时尝试使用普通数组,但出现错误(正如文本所说的那样),但我不明白为什么。使用字符串数组创建 ArrayAdapter 与 ArrayList 有什么区别......它不会把它变成同一个 List 对象吗?尝试通过适配器添加/插入/删除时,是否与原始源变量有某种联系?
很抱歉这个问题很长,但在此先感谢。
android - 如何为 ArrayAdapter 的最后一项创建不同的视图?
我正在从 URL 中检索项目列表,并使用自定义的 ArrayAdapter 在 ListView 中显示它们。我最多显示 25 个结果,但最多从 URL 中检索 26 个,因为如果超过 25 个,我想显示“下一个”链接。我试图找出一种方法来使视图中的最后一个项目只显示下一个链接,而不是其他项目显示的图像和两个 TextView。向下滚动,所有项目都以它们应该的方式显示,但最后一个项目仍然看起来像其他项目。向上滚动时,每五个项目都是空白的(可以看出它仍然存在,因为有分隔线)。
在 getView 内部:
在 ddms 中,它仅为最后一项打印“最后一项”标签,为其余项目打印“其他项目”标签,但不会根据 if-else 更改这些项目。在 XML 中,next 设置为消失,因此不需要在 else 中更改。当我删除 if-else 并仅在 else 中保留代码时,列表正常运行,但我需要下一个链接。关于奇怪行为的原因有什么想法吗?如果您需要查看任何其他代码或需要澄清正在发生的事情,请告诉我。
android - 具有自定义布局的 ListActivity 不会调用 getview
我有一个带有自定义行布局的 ListActivity。行布局由一个复选框、一个文本视图和一个图像按钮组成。
这背后是一个自定义对象的 ArrayList,它只包含一个字符串和一个布尔值。我想复选框反映布尔值,文本视图反映 Sting,右侧的按钮将启动一个动作。
我使用 ArrayAdapter 页面上列出的最后一个构造函数来尝试将它们绑定在一起。 ArrayAdapter(Context context, int resource, int textViewResourceId, List<T> objects)
出于某种原因,textView 由对象 toString() 填充,而不是由 getView 填充。因此,复选框永远不会获得布尔值。有任何想法吗?
android - ListView 有复杂的项目,如何知道项目的状态?
我有线性布局:
它用作 ListView 中的 Item。下面的代码为 ListView 创建一个数组适配器。
我如何知道哪些复选框已选中,哪些未选中?
android - 覆盖 Android ArrayAdapter
我想做一件非常简单的事情。我的应用程序中有一个列表视图,我动态地向其中添加文本。但是,在某一点之后,我想更改列表视图中文本的颜色。因此,我创建了一个 XML 来定义我的自定义列表项,并将 ArrayAdapter 子类化。但是,每当我在自定义 ArrayAdapter 上调用 add() 方法时,都会将一个项目添加到列表视图中,但不会将文本放入其中。
这是我的 XML:`
还有我的 ArrayAdapter 子类:
我确定我做错了什么,但我对 Android 还是有点陌生。
谢谢!`
android - 单击特定视图时,如何在列表视图中获取项目的位置?
正如标题所说,当我单击项目内部的视图时,我想知道项目的确切位置。
假设我在 ArrayAdapter 的 getView() 方法中有以下代码:
在 onClick() 中,我知道被点击的视图 v,但我不知道项目的位置。
让我们做一个技巧。当 getView() 创建视图时,我将把位置保存在 ViewHolder 中:
此代码有效......但并非总是如此。如果您必须滚动列表以查看所有项目,则视图将被回收。假设列表有 10 个元素,只有 5 个是可见的(可见的意思是:如果我们看到一个项目的 1 像素行,那么这个项目是可见的)。现在,如果我们向下滚动,我们将看到第六个元素,但第一个 (0) 仍然可见。我们再滚动一点,第一个元素将被隐藏,我们将看到第七个元素出现,但是这个新元素的视图是第一个元素的视图 (0)。
所以我要保存位置:0、1、2、3、4 和 5。第七个元素 (6) 将保存位置 0:错误。
获取点击回调的另一种方法是使用 ListView 的 OnItemClickListener 侦听器:
如果我向下滚动,我会得到确切的位置,但是通过这种方式,我会在单击项目时收到回调,无论单击的子视图如何。
谢谢。
java - ArrayAdapter:创建 ArrayAdapter 以显示自定义类型的 toString() 方法中的文本的最佳方法是什么?
我打算创建一个保存在自定义对象中的 GPS 坐标的 ArrayList。然后我想显示这些 GPS 坐标的列表。我目前的解决方案是创建一个并行的 ArrayList 字符串,这些字符串本质上是 GPS.toString() 结果。
这似乎是一项复杂的额外工作,可能可以避免和简化。任何人都可以想出一种更好的方法来做到这一点,而不需要大量笨拙的工作。我对创建自定义 ArrayAdapter 进行了一些研究,但我不确定我是否完全理解如何将 GPS 坐标对象转换为对 ListView 有用的东西。如果您认为这是一个更好的解决方案,您能否就如何正确使用它提供一些见解?(即使它只是一个链接)
提前致谢!马特
android - 列表视图的数组适配器抛出空指针异常
我正在尝试在视图数组中添加列表视图。lv1.setAdapter 抛出空指针异常。我不知道为什么会这样。
这是我的代码:
这是 list.xml 中的 ListViewO1
android - ArrayAdapter/ListView 不工作
我是使用 android 编程的新人,在做我的第一个应用程序时,我的列表有问题。这里的代码:
当我看到结果时,我的列表只显示了我正在查询的数据库中的第一项。你能帮我吗?
谢谢指教!乔治。
PS:“nombre”是第 0 列。这就是我写“getString(0)”的原因,因为我只想显示每行的 1 列。