我有一个带有布局的ListView
。有时布局需要朝一个方向看,有时需要朝另一个方向看。它们主要是在不同的区域以不同的权重大小等排列的文本。主视图与其他视图的比例约为5:1。当需要更改时,整个视图只有2/3会更改。
我想我有两个选择:
(现在的方式)一个布局(因此它永远不必重新充气,因为回收的视图都是相同的)和第二个2/3的视图被隐藏,直到需要更改,然后代码将显示它并隐藏原来的2/3的视图。
(另一种方式)两种布局,其中1/3布局重复,每种布局在另一个2/3上。然后当需要使用不同的布局时,来自ListView
回收器的旧视图会被丢弃,一个新的正确视图会膨胀,然后在移动列表时再次膨胀。
因此,我在这里要问的是,最好隐藏/显示同一布局的部分,以防止aListView
中的回收者膨胀更多布局,还是有两个没有额外隐藏视图的精简布局,并在需要时膨胀它们?
最佳答案
如果TextViews
是这些布局的主要部分,我认为性能不会有太大的差异,所以您可以选择任何一种方式。我同意第二种选择,因为:
普通行布局的行数与特殊行数之比很大。如果保留单一布局方法,则必须以代码形式修改每个行的布局,无论是普通的还是特殊的,因为您可能要处理一个回收的View
文件,该文件在显示普通文件时隐藏了2/3部分(因此每次都要修改布局)。如果要使用第二个选项,则可以从getView
方法中删除此部分,只需使用switch
来查看要处理的行类型(在getView
方法中,每次不再修改行布局,而是让ListView
通过提供正确的F行布局)。不要担心会膨胀另一个布局文件(一次),这并不是性能上的问题。
使用一种布局意味着即使用户看不到它们,您的内存中仍有Views
(因此您可能会阻止ListView
膨胀更多Views
(实际上只有一次),但同时您占用了更多的内存,而这些内存甚至没有显示给用户)。第一个选项的优点是数据到行的绑定更简单,因为您可以使用所有视图(即使用户没有看到其中的一部分),而不是第二个选项,在该选项中,您必须根据行类型查看需要显示哪些数据。
代码可读性。有两种行类型,并测试查看您在getView
方法中得到的是哪一种,当您看到每种类型的行有什么逻辑时,这就更有意义了。此外,如果您计划在将来更改这些行布局或添加更多行类型,效果会更好。ListView
在回收视图方面做得很好,只要您帮助它提供行类型。
编辑:ListView
将为您在适配器中声明的每种类型保留一个回收视图。因此,只有在第一次在ListView
中找到第二个布局时,ListView
才会对其进行充气,下一次当它需要一个具有with type的行时,它将使用回收视图(并且它将保持两种回收视图,第一和第二行类型)。