Android布局效率,多个视图还是单个隐藏视图?

Gle*_*.nz 5 android android-layout android-listview android-view

我有一个ListView布局.有时布局需要一种方式,有时候另一种方式.它们主要是在不同区域布置不同重量大小的文本等.主要视图与其他视图的比例约为5:1.当需要更改时,只有2/3的整个视图发生变化.

我想我有两个选择:

  1. (现在的方式)一个布局(所以它永远不必重新充气,因为循环视图都是相同的),视图的第二个2/3被隐藏,直到需要更改,然后代码将揭示它并隐藏原始的2/3视图.

  2. (另一种方式)两个布局,其中1/3布局重复,每个布局都在其他2/3上.然后,当需要使用其中一个不同的布局时,ListView回收器中的旧视图将被丢弃,并且新的正确视图会被充气,并在移动列表时再次返回.

所以我在这里要问的是,隐藏/显示相同布局的部分以防止回收器ListView膨胀更多布局,或者有两个简化布局而没有额外的隐藏视图,并且当它们被充气时更好需要吗?

Luk*_*rog 3

如果它们TextViews是这些布局的主要部分,我认为性能不会有很大差异,所以你可以选择任何一种方式。会选择第二种,因为:

  1. 正常行布局与特殊行布局的比率很大。如果您保留单一布局方法,那么您将必须修改每行的代码布局,无论是普通行还是特殊行,因为View当需要显示正常时,您可能会处理隐藏 2/3 部分的回收对象一个(所以你最终每次都会修改布局)。如果您要使用第二个选项,那么您可以从方法中删除这部分getView,只需使用 aswitch来查看您正在处理的行类型(每次在方法中不再修改行布局getView,您可以让ListView句柄通过为您提供正确的行布局类型)。不用担心(一次)膨胀另一个布局文件,这不是值得担心的性能影响。

  2. 使用一种类型的布局意味着Views即使用户看不到它们,您仍然保留在内存中(因此您可能会阻止ListView更多的膨胀Views(实际上只有一次),但同时您又占用了更多内存,甚至不向用户显示的内存)。第一个选项的优点是数据到行的绑定更简单,因为您可以使用所有视图(即使用户看不到其中的一部分),而不是第二个选项,您可以在其中使用查看需要根据行类型显示哪些数据。

  3. 代码可读性。拥有两种行类型并进行测试以查看在方法中获得哪一种getView更有意义,因为您可以看到每种类型的行具有什么逻辑。此外,如果您计划将来更改这些行布局或添加更多行类型,那就更好了。

ListView只要您帮助它提供行类型,它就可以在回收视图方面做得很好。编辑:ListView将为您在适配器中声明的每种类型保留一个回收视图。因此,ListView仅当第一次在 中找到第二个布局时,才会膨胀第二个布局ListView,下次当它需要具有类型的行时,它将使用回收的布局(并且它将维护两种类型的回收视图,第一行和第二行类型)。