1

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

我不能真正发布任何代码,因为这涉及到很多类。我试图将其分解并注意到它在调用该行requestLayout()的一个后代视图后重用了这些行。但是在我的其他 ListView 中,我也这样做,并且根本没有调用它。

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

我只是想找出 ListView 何时真正需要重用视图。

附言。我正在使用 2.3.3。我知道setHasTransientState()在 4.1 中。但不幸的是我不能使用它

4

1 回答 1

1

我发现了我的具体问题。

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

在我的另一个 ListView 中,我有固定的行高,所以它从来没有这个问题。对于这种情况,我会做同样的事情,因为我真的不需要不同的行高。

于 2013-06-26T07:14:54.207 回答