android - Listview行requestLayout()和View回收

标签 android listview

我很难弄清楚 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/

相关文章:

android - 如何控制通知组点击

android - 将 imageview 对齐到 listview 的末尾,当 listview 加载数据时 android

android - ListView 自定义适配器 - 何时调用 notifyDataSetChanged?

android - Xamarin Listview 分组

android - 带有 viewPager 的 Maps V2

android - 单标签多 View

android - 如何在Android应用程序中一起播放视频和音频

java - 我正在尝试根据用户选择的日期过滤 firestore 内容。说显示 2 月 14 日的所有数据

java - 在 ListView 中使用 Intent 时发生 fatal error

java - 如何加载文本文件的内容并使用ListView显示它?