【问题标题】:Should repetitive views be drawn in xml layout or programmatically?重复视图应该以 xml 布局还是以编程方式绘制?
【发布时间】:2014-04-02 19:39:51
【问题描述】:

我有一个这样的 xml 活动布局:

<ScrollView>
    <LinearLayout>
        <TableLayout>
           <TableRow>
              ....... // around 4 rows per table
           </TableRow>

        </TableLayout>  // around 10 such table
             .
             .
             .
    </LinearLayout>
</ScrollView>

每个 TableLayout(因此是 TableRows)都包含类似的内容。例如,在一个游戏应用程序中,我们在每一行都有关卡编号、分数、进度条、开始按钮。 我的问题是,将所有小部件都包含在 10 TableLayout in xml layout 中是不是更好的设计,或者我应该添加上述 10 TableLayout programatically。(我需要获得引用行上的每个小部件并在那里设置值)。哪种方式更有效且更受欢迎?

【问题讨论】:

  • 这更像是一个讨论问题,您没有提供足够的信息来给出可靠的建议。如果所有的行都相同,ListView 可能比 TableView 更合适......您可以简单地构建一个 Adapter 来处理显示每一行并跟踪它。

标签: android android-layout


【解决方案1】:

我只需要一个&lt;include&gt; 标签并给每个单元格一个ID。 更多信息:http://developer.android.com/training/improving-layouts/reusing-layouts.html

【讨论】:

    【解决方案2】:

    首选方法是以编程方式进行。即使您现在只有固定数量的游戏 (10),也可以轻松地从外部数据源中读取这些内容。如果发生这种情况,您可能不知道要提前显示多少游戏。

    如果是这样,听起来您正在使用 TableLayout 有效地实现 ListView。您可能想考虑只实现一个 ListView 并在以后为自己省去一些麻烦。

    【讨论】:

      【解决方案3】:

      我想用建议表 323go 和我最近的观察来回答我的问题。

      当视图被重复并从数据库等源中获取数据时,使用列表视图是有效的。

      在我的例子中,我有一个 LinearLayout,里面有很多 TableLayout,每一个都与一个关卡相关。每个TableLayout里面,和score相关的数据,没有。谜题解决了,显示状态的进度条在那里。如果我使用 TableLayout,我将不得不管理许多变量集和额外的代码来正确地使用这些值填充视图。

      这就是为什么我使用 ListView 并将 TableLayout 设置为 ListView 的项目。我使用自定义光标适配器将数据与视图绑定。

      用于显示关卡相关数据的 TableLayout 使用 ListView 之前:

      <ScrollView>
          <LinearLayout>
              <TableLayout>
                 <TableRow>
                    ....... // around 4 rows per table
                 </TableRow>
      
              </TableLayout> 
      
              <TableLayout>
                 <TableRow>
                    ....... // around 4 rows per table for score, no. of puzzle solved etc.
                 </TableRow>
      
              </TableLayout>  
                   .
                   .
                   .
                   . // around 10 such TableLayout
          </LinearLayout>
      </ScrollView>
      

      使用 ListView 后显示关卡相关数据的 TableLayout:

      <LinearLayout>
             <TableLayout>
                     <TableRow>
                       .
                       .
                     </TableRow>   // around 4 rows per table for score, no. of puzzle solved etc.
      
             </TableLayout>   // only one such TableLayout
      
      
      </LinearLayout>
      

      【讨论】:

        猜你喜欢
        • 2012-07-06
        • 1970-01-01
        • 2016-05-13
        • 1970-01-01
        • 1970-01-01
        • 2020-08-11
        • 1970-01-01
        • 1970-01-01
        • 2019-12-18
        相关资源
        最近更新 更多