Android:数据列表与其他组件一起滚动

时间:2012-04-02 13:59:28

标签: android listview scrollview

我正在尝试在Android活动中显示数据列表。通常任何人都会使用我之前多次使用的简单ListView来做到这一点。但是现在我有一个带有固定页眉和页脚的应用程序,中间部分(内容)在页眉和页脚下方滚动。在中间部分,我想在数据列表的上方和下方添加其他组件,但整个部分必须是可滚动的。我尝试将组件(如按钮,textview等)添加到listview中,但Eclipse中的布局构建器不允许我这样做。

所以我开始使用ScrollView,您可以轻松添加任何您喜欢的组件。但我不允许将ListView添加到ScrollView,我可以理解,因为它会产生奇怪的效果(因为它们都可以滚动)。

接下来我想使用TableLayout来动态添加TableRows,但是在多个网站上,据说它很慢并且“不是这样做的”。我也找不到一种优雅的方法来在每个项目之间添加分隔符。使用ListView可以非常轻松地完成。

以下图片最多可以解释我想要的效果:http://tinyurl.com/bvkec5d

带有“表格数据”标题的表格可能包含很多项目,因此可能会变得非常大。我不想要的是该表具有固定大小,并且该项在该表中可滚动。我实际上希望表的大小增加,因此包含表的ScrollView也应该增长。我还希望表格上方的信息框能够滚动(与之后可能添加的任何其他组件一样)。

实现这种效果的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

您可以使用包含静态页眉和页脚的简单垂直LinearLayout(或RelativeLayout),并在它们之间使用ListView。您可以在ListView上设置页眉和页脚视图,以添加可滚动的页眉和页脚内容。为了简化示例,这里是LinearLayout方式:

 <LinearLayout android:orientation="vertical" 
               android:layout_height="match_parent"
               android:layout_width="match_parent">
      <!--static header content... can be any kind of view-->
      <TextView 
               android:layout_width="match_parent"
               android:layout_weight="0"
               android:layout_height="wrap_content"/>
      <ListView 
               android:id="@+id/list"
               android:layout_width="match_parent"
               android:layout_height="0dp"
               android:layout_weight="1"/>

      <!--static footer content... can be any kind of view-->
      <TextView 
               android:layout_width="match_parent"
               android:layout_weight="0"
               android:layout_height="wrap_content"/>
 </LinearLayout>

在代码中,您可以说:

ListView theList = (ListView)findViewById(R.id.list);

// example of creating header and footer views from inflation or by instantiation in code
View myHeaderView = getLayoutInflater().inflate(R.layout.myHeaderLayout,theList,false);
View myFooterView = new TextView(this, some layout params);

theList.addHeaderView(myHeaderView); 
theList.addFooterView(myFooterView); 

ListView.addHeaderView和ListView.addFooterView应该允许您将其他静态视图(其内容可以动态更新)添加到ListView的顶部或底部:

public void addHeaderView (View v)
     

自:API级别1添加固定视图以显示在列表顶部。   如果多次调用addHeaderView,则会显示视图   他们被添加的顺序。使用此调用添加的视图可以成为焦点   如果他们想要的话。

     

注意:在调用setAdapter之前调用它。这是ListView可以的   将提供的光标包装为也会占用标头的光标   和页脚的观点。