在布局期间适配器数据源失效时会发生什么?

时间:2013-09-10 20:50:49

标签: android

假设我有一个与共享数据集接口的适配器。在复合视图(即listView)的布局期间,调用getView并访问适配器。为后续元素调用GetView。适配器提供对共享数据集中元素的直接锁定引用。

现在,数据集可能会从适配器下方更改。在这种情况下,适配器将在数据集更改时失效。但是,当UI处于绘制或布局阶段时,数据可能无效。

我的问题是,当视图迭代它的子节点(正在调用getView,并且正在访问适配器)时,如果另一个线程使数据集无效,会发生什么?

2 个答案:

答案 0 :(得分:0)

这取决于您的支持数据是什么样的,以及您如何使其失效,以及如何实现您的getView。根据这些内容,您可能会获得一个表示旧数据,新数据或某些未定义状态的视图,这可能会导致意外数据甚至NullPointerException或其他异常。

如果您在问题中提供有关数据类型和适配器的更多详细信息,则可以提供更详细的答案。适配器的源代码,特别是getView方法也可以提供更具体的答案。

答案 1 :(得分:0)

您应始终从UI线程修改适配器的内容,以防止出现此问题。否则,您偶尔会获得ConcurrentModificationExceptionNullPointerExceptionIndexOutOfBoundsException

我强烈推荐I / O 2010关于ListViews的讨论,如果你还没有机会观看它,关于它们如何工作以及如何优化它们有很多很好的信息。

Google I/O 2010 - The World of ListView