ListView不会滚动,也不会显示所有项目

时间:2016-01-26 18:42:14

标签: android

listViews的最后一个没有滚动或显示所有项目。

  <ScrollView

   xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
  android:background="#ffffff">
    <LinearLayout
      android:id="@+id/movie_detail_container"
      android:orientation="vertical"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:background="@color/white"
     >

    <LinearLayout android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:orientation="vertical"
       android:background="#04B4AE"
       android:layout_marginTop="10dp">
      <TextView
          android:id="@+id/title"
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:padding="10dp"
          android:textColor="#ffffff"
          android:textSize="50dp" />
   </LinearLayout>
   <LinearLayout
    android:layout_width="382dp"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:layout_marginRight="5dp">

    <ImageView
        android:id="@+id/grid_item_image"
        android:layout_width="116dp"
        android:layout_height="199dp"
        android:layout_marginTop="5dp"
        android:layout_marginLeft="20dp"
        android:scaleType="fitCenter"  />
    <LinearLayout

        android:layout_height="202dp"
        android:layout_width="172dp"
        android:layout_marginLeft="15dp"
        android:orientation="vertical" >
        <TextView
            android:id="@+id/release_date"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="bottom"
            android:background="#00000c"
            android:padding="10dp"
            android:textColor="#fff"
            android:textSize="20dp" />

        <TextView
            android:id="@+id/vote_average"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="bottom"
            android:padding="10dp"
            android:textColor="#000000"
            android:textSize="25dp"
            />

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="ADD"
            android:id="@+id/addfavorite"
            android:layout_gravity="right|top" />


    </LinearLayout>
   </LinearLayout>

<TextView
    android:id="@+id/overview"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom"
    android:background="@color/white"
    android:padding="10dp"
    android:textColor="@color/black"
    android:textSize="20dp" />


<ListView
    android:id="@+id/reviewMovie"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="20dp"

    android:background="#04B4AE"
    android:layout_weight="0.68">

</ListView>


  <ListView
    android:id="@+id/videoMovie"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/grey"

    />

 </LinearLayout>
 </ScrollView>

我不是最后两个ListView Scroll或至少显示其中的所有项目,我确定有很多项目,只有一个项目出现

1 个答案:

答案 0 :(得分:0)

首先,在ListView内使用ScrollView完全没有建议和建议。您可以更好地利用getItemViewType() ListView来补偿行项目的不同类型的布局。

如果你将ListView放在ScrollView内,那么ListView就不会伸展到它的全高,同样也会发生同样的情况。因此,如果您仍想使用ListView内的ScrollView,则必须计算ListView的高度。以下是根据儿童计算ListView身高的代码。

public static void setListViewHeightBasedOnChildren(ListView listView) {
    ListAdapter listAdapter = listView.getAdapter();
    if (listAdapter == null)
        return;

    int desiredWidth = MeasureSpec.makeMeasureSpec(listView.getWidth(), MeasureSpec.UNSPECIFIED);
    int totalHeight = 0;
    View view = null;
    for (int i = 0; i < listAdapter.getCount(); i++) {
        view = listAdapter.getView(i, view, listView);
        if (i == 0)
            view.setLayoutParams(new ViewGroup.LayoutParams(desiredWidth, LayoutParams.WRAP_CONTENT));

        view.measure(desiredWidth, MeasureSpec.UNSPECIFIED);
        totalHeight += view.getMeasuredHeight();
    }
    ViewGroup.LayoutParams params = listView.getLayoutParams();
    params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
    listView.setLayoutParams(params);
}

要使用此方法,只需将ListView作为参数传递给上述函数。

ListView listView= (ListView)findViewById(R.id.listView);
setListViewHeightBasedOnChildren(listView);