2011-01-25 13 views
3

我是Android开发新手,我对Commonsware的“繁忙的编码器Android开发指南”中摘录的一段摘录有疑问。有一个示例,它构造了一个扩展ListActivity的类,并显示了通过上下文菜单从列表中删除和删除的功能。在为列表创建一个带有字符串源的ArrayAdapter之前,文本说要将String数组转换为一个ArrayList类型,因为“我们希望能够即时更改列表的内容,如果你使用ArrayList而不是普通的字符串数组更容易“Android开发 - 使用ArrayList <String> vs ArrayAdapter的字符串数组

我理解这个概念如果我们使用ArrayList或String数组直接操作列表,但为什么如果我们使用ArrayAdapter.add /插入/删除方法?一旦创建了ArrayAdapter(并且从我从该.java文件中理解的内容),它将源数据转换为List对象,无论它来自数组还是ArrayList。

我尝试使用正常的数组创建适配器时,我得到一个错误(正如预期的文本所说),但我不明白为什么。创建一个ArrayAdapter与一个字符串数组与ArrayList的区别是什么......它不会将它变成同一个List对象吗?试图通过适配器添加/插入/删除时,是否有某种绑定回原始源变量?

对不起,长期的问题,但在此先感谢。

回答

3

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

+0

感谢您的快速响应!我认为它变得更加清晰。然而,我仍然不清楚这个事实,我没有直接改变数组或ArrayList ...我正在改变适配器(我猜,它调用add/insert在自己的List上,它是从原始源创建的)。我曾经看到,ArrayAdapter在使用Array.asList()时提供了一个数组与List对象,我认为这意味着对该List的任何更改都会尝试将数据写回原始数组。所以通过我调用添加适配器,它间接地尝试调用添加到原始数组上。 – 2011-01-25 15:39:28

相关问题