我有一个ListView,其中listview的每一行都包含大约10个ImageButton。这些按钮大多数具有可见性=消失,并且仅在非常罕见的情况下显示。我想知道是否值得用ViewStubs替换这些ImageButton,以避免一直为列表 View 的所有行加载它们(及其包含的图像)。然后将它们的可见性再次设置为“消失”,因此我不确定加载它们会产生什么影响。它们的图像实际上是否已加载?

请注意,我正在谈论替换例如具有8个ViewStub的8个ImageButton,而不是1个

干杯

最佳答案

编辑:刚注意到Endzeit对我之前的类似方向发表了评论。

我将从围绕带有和不带有 View 的膨胀代码进行一些基准测试开始-只需注释掉适配器代码,这样它就不会尝试访问不存在的 View 。

如果从布局中删除 View 确实带来了您认为是必要的改进,并且由于您说 View 仅在罕见的情况下存在,而无论如何您都需要在适配器中进行检查,
然后不要夸大这些 View ,甚至不要使用 View stub ,而是在代码中创建它们并根据需要添加/删除它们(使用 View 持有者引用它们)。

您甚至可以更进一步,并懒惰地创建这些 View ,类似于延迟加载图像,但是只有在再次运行一些基准测试之后,我才能这样做。

我将使用ViewStubs加载复杂的布局,而不是简单的ImageButtons。

编辑2:

查看ViewStub的inflate命令,它在需要可见时会执行的操作,您可以看到它使给定的布局膨胀,然后将其添加到父布局中-由于您添加的是简单的ImageButton,因此可以通过不使用ViewStub来获得性能并在代码中添加ImageButton。
http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/5.1.1_r1/android/view/ViewStub.java#ViewStub.inflate%28%29

10-08 16:28