ListView показывает только один элемент с height = "wrap_content" - PullRequest
0 голосов
/ 29 июня 2019

В моем фрагментном макете у меня есть представление «Вложенный свиток» с двумя относительными макетами внутри, сверху и снизу, снизу у меня есть список с примерно двадцатью элементами, но если я устанавливаю высоту списка с помощью wrap_content, то только одна строкапоказано, тогда как, если я, например, установлю высоту 1000dp, все линии будут показаны, я бы не хотел фиксировать высоту статическим способом, но я бы предпочел использовать wrap_content, что я могу сделать?

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical">
<android.support.v4.widget.NestedScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/nested_content"
    android:clipToPadding="false"
    android:scrollbars="none"
    app:layout_behavior="@string/appbar_scrolling_view_behavior">

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="300dp"
    android:id="@+id/top">
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="200dp"
        //some button and text view
    </RelativeLayout>
  </RelativeLayout>

  <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/bottom"
        android:layout_below="@id/top">
        <ListView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/scores"
        </ListView>

    </RelativeLayout>
</RelativeLayout>
</android.support.v4.widget.NestedScrollView>

Ответы [ 4 ]

1 голос
/ 29 июня 2019

Вы можете использовать ниже метод Утилиты, чтобы установить высоту вашего ListView на основе количества детей.

public static void setListViewHeightBasedOnChildren(ListView myListView) {
        ListAdapter adapter = myListView.getAdapter(); 
        if (myListView != null) {
           int totalHeight = 0;
           for (int i = 0; i < adapter.getCount(); i++) {
              View item= adapter.getView(i, null, myListView);
              item.measure(0, 0);
              totalHeight += item.getMeasuredHeight();
           }

           ViewGroup.LayoutParams params = myListView.getLayoutParams();
           params.height = totalHeight + (myListView.getDividerHeight() * (adapter.getCount() - 1));
           myListView.setLayoutParams(params);
        }          
    }
0 голосов
/ 29 июня 2019

Человек, это один из видов RelativeLayout Blitzkrieg. Но если это то, что вам нужно, чтобы соответствовать вашей функции, возможно, вы должны попытаться настроить NestedScrollView для заполнения его области просмотра.

андроида: fillViewport = "истинный"

    <android.support.v4.widget.NestedScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/nested_content"
        android:clipToPadding="false"
        android:scrollbars="none"
        android:fillViewport="true"
        app:layout_behavior="@string/appbar_scrolling_view_behavior">

Попробовал это с "deblitzkrieged" версией того, что вы опубликовали, и это сработало, может быть, это также работает 4 вас.

UPDATE: Вы правы, при верхнем подходе у вас останется не прокручиваемый фрагмент.

Я также установил android:nestedScrollingEnabled="true" в ListView и сразу забыл об этом. Если кто-то все еще интересуется примером кода, см. Пример ниже.

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">
<android.support.v4.widget.NestedScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/nested_content"
        android:clipToPadding="false"
        android:fillViewport="true"
        android:scrollbars="none">

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

        <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="300dp"
                android:id="@+id/top">
            <TextView
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:text="Foo Bar"/>
        </RelativeLayout>

        <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_alignParentBottom="true"
                android:id="@+id/bottom"
                android:layout_below="@id/top">
            <ListView
                    android:nestedScrollingEnabled="true"
                    android:layout_alignParentBottom="true"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:id="@+id/scores">
            </ListView>

        </RelativeLayout>
    </LinearLayout>
</android.support.v4.widget.NestedScrollView>

0 голосов

Вы можете проверить это Расширяемый список высоты .

Лично я использую это: Расширяемая высота GridView и является той же философией с Расширяемым списком высот .

0 голосов
/ 29 июня 2019

1.Удалите NestedScrollView2. добавьте это на андроид: transcriptMode = "alwaysScroll" вот так

    <ListView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/scores"
        android:transcriptMode="alwaysScroll"
    </ListView>
...