Listview行requestLayout()和View回收

时间:2013-06-25 14:38:52

标签: android listview

我很难搞清楚ListView何时决定回收它的所有视图。我有2个不同的ListViews,我改变一些布局的东西,然后播放动画。在我的第一个ListView中,这工作正常,只有我试图更改的行实际上受到影响,但在我的其他ListView中,所有行都受到影响,并且视图正在被重用。

我无法发布任何代码,因为这里涉及很多类。我试图将其分解并注意到在行的后代视图之一调用requestLayout()后重新使用行。但是在我的其他ListView中,我也这样做,而且根本没有调用它。

我的代码notifiyDatasetChanged()中没有任何地方被调用,我也没有更改任何其他视图。

我只是试图找出ListView实际需要重用视图的时间。

PS。我正在使用2.3.3。我在4.1中了解setHasTransientState()。但不幸的是我无法使用它

1 个答案:

答案 0 :(得分:1)

我发现了我的具体问题。

经过ListView源代码的长时间调试后,我发现了我的两个ListView实现之间的行为差​​异。我发现他们中的一个正在调用onSizeChanged(),首先是一个新的高度,然后是另一个具有旧高度的onSizeChanged()。在此方法中,它设置标志mDataChanged,这反过来将导致视图被回收。

在我的其他ListView中,我有固定的行高,所以它从来没有这个问题。我将在这种情况下做同样的事情,因为我并不需要不同的行高。