我很难搞清楚ListView何时决定回收它的所有视图。我有2个不同的ListViews,我改变一些布局的东西,然后播放动画。在我的第一个ListView中,这工作正常,只有我试图更改的行实际上受到影响,但在我的其他ListView中,所有行都受到影响,并且视图正在被重用。
我无法发布任何代码,因为这里涉及很多类。我试图将其分解并注意到在行的后代视图之一调用requestLayout()
后重新使用行。但是在我的其他ListView中,我也这样做,而且根本没有调用它。
我的代码notifiyDatasetChanged()
中没有任何地方被调用,我也没有更改任何其他视图。
我只是试图找出ListView实际需要重用视图的时间。
PS。我正在使用2.3.3。我在4.1中了解setHasTransientState()
。但不幸的是我无法使用它
答案 0 :(得分:1)
我发现了我的具体问题。
经过ListView源代码的长时间调试后,我发现了我的两个ListView实现之间的行为差异。我发现他们中的一个正在调用onSizeChanged()
,首先是一个新的高度,然后是另一个具有旧高度的onSizeChanged()
。在此方法中,它设置标志mDataChanged
,这反过来将导致视图被回收。
在我的其他ListView中,我有固定的行高,所以它从来没有这个问题。我将在这种情况下做同样的事情,因为我并不需要不同的行高。