代码之家  ›  专栏  ›  技术社区  ›  Dexter Arijit Banerjee

重复视图应该以xml布局绘制还是以编程方式绘制?

  •  0
  • Dexter Arijit Banerjee  · 技术社区  · 12 年前

    我的xml活动布局如下:

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

    每个TableLayout(因此是TableRows)都包含类似的内容。例如,在游戏应用程序中,每一行都有级别号、分数、进度条和开始按钮。 我的问题是,在10 TableLayout中包含所有小部件是不是更好的设计 在xml布局中 或者我应该添加上述10个TableLayout 程序化地 。(我需要获取对行上每个小部件的引用,并在那里设置值)。哪种方式更有效、更可取?

    3 回复  |  直到 12 年前
        1
  •  0
  •   OrhanC1    12 年前

    我只要一个 <include> 标记并给每个单元格一个ID。 有关详细信息: http://developer.android.com/training/improving-layouts/reusing-layouts.html

        2
  •  0
  •   Nik    12 年前

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

    如果是这样的话,听起来就像是在使用TableLayout有效地实现ListView。您可能想考虑只实现一个ListView,这样以后就可以省去一些麻烦了。

        3
  •  0
  •   Dexter Arijit Banerjee    12 年前

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

    当视图被重复并且数据被从类似于源的数据库中提取时,使用列表视图是有效的。

    在我的例子中,我有一个LinearLayout,其中有许多TableLayout,每个都与一个级别相关。在每个TableLayout中,都有与分数、解谜数量、显示状态的进度条相关的数据。如果我使用TableLayout,我必须管理许多变量集和额外的代码,以正确地用值填充视图。

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

    使用ListView之前显示级别相关数据的TableLayout:

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