【问题标题】:Android Layout efficiency, multiple views or single with hidden views?Android 布局效率,多个视图或单个隐藏视图?
【发布时间】:2012-05-10 03:36:15
【问题描述】:

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

我想我有两个选择:

  1. (现在的样子)一种布局(所以它永远不必重新膨胀,因为回收的视图都是一样的)并且视图的第 2 2/3 被隐藏直到需要它要更改,然后代码将显示它并隐藏视图的原始 2/3。

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

所以我在这里要问的是,最好隐藏/显示同一布局的部分以防止ListView 中的回收器膨胀更多布局,或者有两个没有额外隐藏视图的缩减布局,并在需要时给它们充气?

【问题讨论】:

    标签: android android-layout android-listview android-view


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      【解决方案2】:

      实际上,这点额外的 GC 恕我直言,不应该成为您决定的驱动因素。

      我会走更容易维护和理解的路线。

      xml 中还有一个很好用的 include 标记,如下所示:

      <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
          />    
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-12-18
        • 1970-01-01
        • 2023-03-31
        • 2016-08-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-19
        相关资源
        最近更新 更多