Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android开发-使用ArrayList<;字符串>;vs带有ArrayAdapter的字符串数组_Android_Arraylist_Android Arrayadapter - Fatal编程技术网

Android开发-使用ArrayList<;字符串>;vs带有ArrayAdapter的字符串数组

Android开发-使用ArrayList<;字符串>;vs带有ArrayAdapter的字符串数组,android,arraylist,android-arrayadapter,Android,Arraylist,Android Arrayadapter,我是Android开发新手,我在Commonware的《忙碌的程序员Android开发指南》中读到一段摘录,对此我有一个问题。例如,它正在构造一个扩展ListActivity的类,并显示通过上下文菜单从列表中删除的能力。在为列表设置带有字符串源的ArrayAdapter之前,文本中说要将字符串数组转换为ArrayList类型,因为“我们希望能够动态更改列表的内容,如果使用ArrayList而不是普通的字符串数组,这将更容易” 如果我们使用ArrayList或String数组直接操作列表,我理解这

我是Android开发新手,我在Commonware的《忙碌的程序员Android开发指南》中读到一段摘录,对此我有一个问题。例如,它正在构造一个扩展ListActivity的类,并显示通过上下文菜单从列表中删除的能力。在为列表设置带有字符串源的ArrayAdapter之前,文本中说要将字符串数组转换为ArrayList类型,因为“我们希望能够动态更改列表的内容,如果使用ArrayList而不是普通的字符串数组,这将更容易”

如果我们使用ArrayList或String数组直接操作列表,我理解这个概念,但是如果我们使用ArrayAdapter.add/insert/remove方法,这又有什么关系呢?一旦创建了ArrayAdapter(根据我对该.java文件的理解),它就会将源数据转换为列表对象,无论它来自数组还是ArrayList

我在创建适配器时尝试使用普通数组,但我得到了一个错误(正如文本所说的那样),但我不明白为什么。使用字符串数组创建ArrayAdapter与使用ArrayList创建ArrayAdapter有什么区别…它不会将其转换为同一个列表对象吗?当试图通过适配器添加/插入/删除时,是否与原始源变量存在某种联系


很抱歉提出了这么长的问题,但请提前感谢。

您可以更改原始数组/arraylist。然后在适配器上调用notifyDataSetChanged(),它会用新信息更新列表。如果使用ArrayList,则可以使用其所有常规操作在任意索引处插入/删除数据,而这是普通字符串数组所无法做到的。 因此ListView的内容在很大程度上与原始数据源绑定在一起——在调用myListView.setAdapter()时,适配器并没有修复这些内容。
但是,如果使用数组尝试使用add、remove、insert等方法,则会导致错误,因为数组不能这样使用。ArrayAdapter实际上会将字符串数组转换为AbstractList对象,但该对象无法修改。

感谢您的快速响应!我想它变得更清晰了。但是,我仍然不清楚我没有直接更改数组或ArrayList这一事实……我正在更改适配器(我猜,它在从原始源创建的自己的列表上调用add/insert)。我确实看到ArrayAdapter在提供数组时使用Array.asList()而不是List对象,我认为这意味着对该列表的任何更改都将尝试写回/通过原始数组。因此,通过在适配器上调用add,它间接地尝试在原始数组上调用add。