2012-05-10 90 views
4

我有一个ListView与他们的布局。有时候布局需要一种方式,有时另一种方式。它们主要分布在不同地区,不同重量大小的文字等。主视图与其他视图的比例约为5:1。当需要改变时,只有整个视图的2/3改变。Android布局效率,多个视图或单个隐藏视图?

我想我有两个选择:

  1. 一种布局(这样永远不会被重新充气,由于回收的看法都是一样的)(它现在的样子)和第二2/3的视图是隐藏的,直到需要更改时,代码才会显示它并隐藏视图的原始2/3。

  2. (其他方式)两个布局,1/3布局重复,每个都有其他2/3。然后,当需要使用不同布局之一时,ListView回收站的旧视图会被丢弃,并且新的正确视图会膨胀,并在列表移动时再次返回。

那么我问这里是它更好地隐藏相同的布局/显示部件,以防止在ListView回收站从充气更多的布局,或有两个切割下来的布局,没有额外的隐藏意见,并在需要时让他们膨胀?

回答

2

如果TextViews是那些布局的重要组成部分,我不认为有将是在性能上有很大的不同所以你可以去任何一个方面。 将与方案二去,因为:

  1. 正常的行数之比布局VS特行是很大的。如果你保持单一布局的方法,那么你将不得不修改的代码布局,每个行,正常或特殊,因为你可能会处理回收的View有2/3部分隐藏的时候是时候显示一个正常的(所以你最终每次修改布局)。如果您要使用第二个选项,那么您可以从getView方法中删除此部分,并简单地使用switch来查看您正在处理的行类型(每次在getView方法中不再修改行布局,让ListView通过为您提供正确类型的行布局来处理该问题)。不要担心再膨胀另一个布局文件(一次),这不是担心的性能问题。

  2. 使用一个类型的布局就意味着你遇到Views剩余内存,即使用户没有看到他们(所以你可能会阻止ListView从充气更Views(只有一次,事实上),但与此同时,你甚至不会向用户展示更多的记忆)。第一个选项的优点是数据与行的绑定更加简单,因为您可以随意使用所有视图(即使用户没有看到它们的一部分),而不是第二个选项,您将拥有哪些视图查看哪些数据需要根据行类型显示。

  3. 代码可读性。有两种行类型和测试,看看你在getView方法中得到哪一种,它更有意义,因为你看到了每种行的逻辑。此外,如果您计划在将来更改这些行布局或添加更多行类型,则会更好。

只要您帮助提供行类型,ListView在回收视图方面做得很好。 编辑:ListView将为您在适配器中声明的每种类型保留一个循环视图。所以ListView将膨胀第二个布局只有它第一次发现它在ListView,下一次,当它需要一个与类型的行它将使用回收的一个(它将保持两种类型的循环视图,第一个和第二行类型)。

0

其实这一点额外的GC恕我直言不应该是你的决定的驱动程序。

我会走容易保持和理解的路线。

也有一个很好的有用的包括像这样的XML标签:

<include 
    android:id="@+id/abc" 
    android:layout_height="wrap_content" 
    android:layout_width="fill_parent" 
    layout="@layout/abc" , where abc = the xml file you want to include 
    />  
相关问题