4

我是 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 对象吗?尝试通过适配器添加/插入/删除时,是否与原始源变量有某种联系?

很抱歉这个问题很长,但在此先感谢。

4

1 回答 1

3

您可以更改原始数组/数组列表。然后在适配器上调用 notifyDataSetChanged() 并使用新信息更新列表。如果您使用 ArrayList,那么您可以使用它的所有正常操作在任意索引处插入/删除数据,这是普通字符串数组无法做到的。因此,ListView 的内容与原始数据源密切相关——在您调用 myListView.setAdapter() 时,适配器并未修复内容。但是,add、remove、insert 等方法如果你用数组尝试它们会导致错误,因为数组不能像这样使用。ArrayAdapter 实际上会将 String 数组转换为 AbstractList 对象,但不能修改。

于 2011-01-25T15:08:58.870 回答