2015-03-19 89 views
1

我对ListView中的高度有疑问。这是我的情况:高度列表视图 - 所有行可见

我有一个布局下一个结构:

<ScrollView 
... 
android:layout_width="fill_parent" 
android:layout_height="0dp" 
android:layouit_weight="0.8" > 

    <TableLayout 
    ... 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:stretchColumns="0" > 

     <TableRow> 
     <TextView ... /> 
     </TableRow> 
     <TableRow> 
     <ListView 
     ... 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" ... /> 
     </TableRow> 

     <TableRow> ... 

    </TableLayout> 
</ScrollView> 

每个的TableRow有一个TextView(标题)和一个ListView(元素)。

我的问题是,即使它有多个元素(2或更多),我的ListView总是显示第一个元素(一行)。您可以在ListView中进行滚动,并且您可以看到ListView具有所有元素,但在屏幕中,ListView的高度降低了,它只显示一行。

我已经把'wrap_content'在ListView的高度,但我不知道它为什么没有足够的高度来显示所有元素。但是,如果我在ListView的高度(例如200 dp)中放置一个固定值,它将取得该值,并且可以同时看到所有项目。为什么?

任何人都可以帮助我吗?

谢谢。

+0

带有listview的滚动视图,你不觉得它是一个糟糕的UI设计?其次,放置你的整个代码比你的话容易理解。 – Fasiha 2015-03-19 11:14:10

回答

1

尝试在运行时为每行添加高度。

+0

如何?我希望ListView具有wrap_content的高度,也就是说,它的高度与元素的高度相同。 – KryNaC 2015-03-19 10:46:32

+1

首先,您必须通过获取行的每个行元素的高度并将行高与列表视图中的项目总数相乘来查找列表视图的总高度。然后你必须设置这个总高度来使用列表视图: listView.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,totalHeight)); 或 而不是使用listview,您可以使用linearlayout并通过使用addChild()方法膨胀行视图来添加项目。 – 2015-03-19 11:00:29

+0

好回复@Arun Kumar!我已经把'listView.setLayoutParams(新的LayoutParams(LayoutParams.MATCH_PARENT,totalHeight));'它的工作原理!我必须使用ListView,因为我使用BaseAdapter来控制某些元素,因此将放弃LinearLayout。但是,我不明白为什么wrap_content不起作用...在我的应用程序中的其他ListViews运作良好!也许,由于它在ScrollView – KryNaC 2015-03-19 11:38:00