【问题标题】:ScrollView with a ListView doesn't scroll - android带有 ListView 的 ScrollView 不滚动 - android
【发布时间】:2013-02-05 07:59:57
【问题描述】:

我对以下布局的问题是布局不滚动。我的要求是我必须显示 2 个有时可能很大的列表。因此,我将两个 ListView 都放在了 ScrollView 中,这样我就可以滚动到底部并查看两个 ListView。 I don't want the ListView to scroll。我只希望我的 ScrollView 能够正常运行。有什么建议吗??

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<ScrollView
        android:id="@+id/scrollViewContactDetails"
        android:layout_width="match_parent"
        android:layout_height="fill_parent" android:fillViewport="true">


        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:orientation="vertical" >


            <TextView
                android:id="@+id/name"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginLeft="10dp"
                android:layout_marginTop="5dp"
                android:textAppearance="?android:attr/textAppearanceLarge"
                android:textSize="22dp" />

            <LinearLayout
                android:id="@+id/numbersLayout"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_marginLeft="20dp"
                android:layout_marginRight="20dp"
                android:orientation="vertical"
                android:weightSum="1" >

                <LinearLayout
                    android:id="@+id/numbersLayoutList"
                    android:layout_width="match_parent"
                    android:layout_height="fill_parent"
                    android:gravity="center"
                    android:orientation="vertical"
                    android:weightSum="1" >

                    <ListView
                        android:id="@+id/numbersList"
                        android:layout_width="match_parent"
                        android:layout_height="fill_parent"
                        android:layout_gravity="center"
                        android:dividerHeight="2dp" >
                    </ListView>
                </LinearLayout>
            </LinearLayout>

            <LinearLayout
                android:id="@+id/emailLayout"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_marginLeft="20dp"
                android:layout_marginRight="20dp"
                android:layout_marginTop="10dp"
                android:orientation="horizontal"
                android:weightSum="1" >

                <LinearLayout
                    android:layout_width="120dp"
                    android:layout_height="match_parent"
                    android:layout_gravity="right|center"
                    android:gravity="top|right"
                    android:orientation="vertical" >

                    <TextView
                        android:id="@+id/emailId"
                        android:layout_width="120dp"
                        android:layout_height="wrap_content"
                        android:layout_marginTop="10dp"
                        android:gravity="right|center"
                        android:textAppearance="?android:attr/textAppearanceMedium"
                        android:textColor="#8d8d8d"
                        android:textSize="18dp" />
                </LinearLayout>

                <LinearLayout
                    android:id="@+id/emailLayoutList"
                    android:layout_width="match_parent"
                    android:layout_height="fill_parent"
                    android:layout_marginLeft="20dp"
                    android:gravity="center"
                    android:orientation="vertical"
                    android:weightSum="1" >

                    <ListView
                        android:id="@+id/emailList"
                        android:layout_width="match_parent"
                        android:layout_height="fill_parent"
                        android:layout_gravity="center"
                        android:layout_weight="1"
                        android:dividerHeight="2dp" >
                    </ListView>
                </LinearLayout>
            </LinearLayout>
        </LinearLayout>
    </ScrollView>
</LinearLayout>

【问题讨论】:

标签: android android-layout android-listview scroll android-scrollview


【解决方案1】:

我花了几天时间试图弄清楚如何实现这一点,但找不到任何解决方案。 You should not put a ListView inside a ScrollView 是我搜索的所有地方的常用语。我不想使用 LinearLayout 或 ViewGroup,因为我已经使用 ListView 创建了整个 UI,它对我和其他人来说都很棒。它运行良好,只是页面没有滚动。

最近我在这里偶然发现了一个问题,并想尝试一下这个答案。它完美无瑕!

解决办法如下:

public class Utility {
    public static void setListViewHeightBasedOnChildren(ListView listView) {
        ListAdapter listAdapter = listView.getAdapter(); 
        if (listAdapter == null) {
            // pre-condition
            return;
        }

        int totalHeight = 0;
        for (int i = 0; i < listAdapter.getCount(); i++) {
            View listItem = listAdapter.getView(i, null, listView);
            listItem.measure(0, 0);
            totalHeight += listItem.getMeasuredHeight();
        }

        ViewGroup.LayoutParams params = listView.getLayoutParams();
        params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
        listView.setLayoutParams(params);
    }
}

将适配器分配给列表视图后,只需调用 Utility.setListViewHeightBasedOnChildren(yourListView) 即可!

非常感谢 DougW 提供答案。这里是原链接How can I put a ListView into a ScrollView without it collapsing?

【讨论】:

  • 非常感谢你拯救了我的一天
【解决方案2】:

你不应该把listview放到scrollview中,这不是一个好主意。如果您不希望它滚动,也许您不应该使用列表视图。您是否尝试过 LinearLayouts?

【讨论】:

    【解决方案3】:

    您可以使用一个列表视图,而不是放置两个列表视图,您可以在该列表视图的适配器中添加两个数据或扩展两个 xml 文件。这将在一个列表视图中显示两个数据并使用一个滚动条滚动数据。

    【讨论】:

      【解决方案4】:

      在调用下面的方法之前,

      public static void setListViewHeightBasedOnChildren(ListView listView) {
              ListAdapter listAdapter = listView.getAdapter(); 
              if (listAdapter == null) {
                  // pre-condition
                  return;
              }
      
              int totalHeight = 0;
              for (int i = 0; i < listAdapter.getCount(); i++) {
                  View listItem = listAdapter.getView(i, null, listView);
                  listItem.measure(0, 0);
                  totalHeight += listItem.getMeasuredHeight();
              }
      
              ViewGroup.LayoutParams params = listView.getLayoutParams();
              params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
              listView.setLayoutParams(params);
          }
      

      您必须从滚动视图中删除属性 'android:fillViewport="true"。如果没有,滚动不起作用。

      【讨论】:

        【解决方案5】:

        试试这个方法:

        您从布局中删除了滚动视图,因为它不适用于列表视图..

        你还把高度"android:layout_height="fill_parent" 放在列表视图中,这样就占据了父布局的全部高度。

        所以请为两个列表视图手动修复一些高度。

        【讨论】:

          【解决方案6】:

          找到解决方案只需添加:

          android:nestedScrollingEnabled="true"
          

          到列表视图:3

                      <ListView
                          android:id="@+id/ListViewPrzebiegTrasy"
                          android:layout_width="match_parent"
                          android:layout_height="200dp"
                          android:visibility="visible"
                          android:scrollbars="vertical"
                          android:nestedScrollingEnabled="true">
                      </ListView>
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-07-29
            • 2011-09-06
            • 1970-01-01
            • 1970-01-01
            • 2013-10-01
            • 2013-09-19
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多