我很难弄清楚 ListView 何时决定回收它的所有 View 。我有 2 个不同的 ListViews,我在其中更改了一些布局内容并在之后播放动画。在我的第一个 ListView 中,这工作正常,实际上只有我试图更改的行受到影响,但在我的其他 ListView 中,所有行都受到影响并且 View 被重用。
我真的不能发布任何代码,因为其中涉及很多类。我试图将其分解并注意到它在调用 requestLayout()
之后在该行的一个后代 View 中重用了这些行。但是在我的其他 ListView 中,我做了同样的事情,但根本没有调用它。
我的代码中没有任何地方 notifiyDatasetChanged()
被调用,我也没有更改任何其他 View 。
我只是想找出 ListView 何时真正需要重用 View 。
附言。我正在使用 2.3.3。我知道 4.1 中的 setHasTransientState()
。但不幸的是我不能使用它
最佳答案
我发现了我的具体问题。
通过 ListView 的源代码进行长时间调试后,我发现了我的两个 ListView 实现之间的行为差异。我发现其中一个正在调用 onSizeChanged()
,首先是一个新的高度,紧接着是另一个具有旧高度的 onSizeChanged()
。在此方法中,它设置了一个标志 mDataChanged
,这反过来将导致 View 被回收。
在我的另一个 ListView 中,我有固定的行高,所以它从来没有这个问题。我将对这种情况做同样的事情,因为我真的不需要不同的行高。
关于android - Listview行requestLayout()和View回收,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17300308/