0

我在我的 ListView 中使用 ArrayAdapter。

我真的不明白当我将 ArrayList 设置为我的 ArrayAdapter 时,它是否会重新创建它的所有对象,或者只是引用它。

由于某种原因,在列表视图中应该相同的相同对象不会受到属性更改的影响,就好像当前对象是另一个对象的克隆一样。

任何人都可以请清除吗?

4

3 回答 3

1

当您传递ArrayList给时ArrayAdapter,它实际上使用传递引用来操作对象。

而当你改变你的内容ArrayList并想要反映这些变化时ArrayAdapter,你必须调用notifyDataSetChanged()你的适配器的方法。

PS:实际上,您应该将 ArrayList 的克隆对象传递给适配器(除非您知道自己在做什么),因为它是不必要的并且会占用额外的资源。

更多信息

于 2012-09-04T15:13:27.460 回答
0

这两种情况都是可能的,这里解释第二种情况如何帮助优化您的列表视图:http: //developer.android.com/training/improving-layouts/smooth-scrolling.html

于 2012-09-04T15:31:03.450 回答
0

这取决于您如何创建ArrayAdapter.

如果您使用不带数组或不List作为参数的构造函数版本,那么它将创建每个适配器实例维护的新列表。如果您使用以下版本之一创建适配器:

ArrayAdapter(Context context, int textViewResourceId, List<T> objects)

ArrayAdapter(Context context, int resource, int textViewResourceId, List<T> objects)

然后,您可以向多个适配器提供相同的外部列表,并且只更改一次数据集,因为在这种情况下,适配器只是引用您的列表,而不复制数据。

于 2012-09-04T15:14:03.437 回答