Показать список в виде списка полностью - PullRequest
0 голосов
/ 12 января 2019

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

Все эти опции, которые я пробовал не показывать список полностью, каждая опция оставляет половину или более элементов для прокрутки

Вот мой xml:

<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/colorPrimary">

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fillViewport="true"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">

        <android.support.constraint.ConstraintLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <android.support.constraint.ConstraintLayout
                android:id="@+id/question_content_container"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginStart="14dp"
                android:layout_marginTop="59dp"
                android:layout_marginEnd="14dp"
                android:layout_marginBottom="22dp"
                android:background="@color/white"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintHorizontal_bias="1.0"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toTopOf="parent"
                app:layout_constraintVertical_bias="0.0">

                ...

                <ListView
                    android:id="@+id/answers_list"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_marginStart="12dp"
                    android:layout_marginTop="18dp"
                    android:layout_marginEnd="12dp"
                    android:footerDividersEnabled="false"
                    android:layout_marginBottom="7dp"
                    android:divider="@drawable/divider"
                    android:scrollbars="none"
                    android:transcriptMode="alwaysScroll"
                    app:layout_constraintBottom_toBottomOf="parent"
                    app:layout_constraintEnd_toEndOf="parent"
                    app:layout_constraintStart_toStartOf="parent"
                    app:layout_constraintTop_toBottomOf="@+id/question_tv"
                    app:layout_constraintVertical_bias="0.0" />

                ...

            </android.support.constraint.ConstraintLayout>

           ...

        </android.support.constraint.ConstraintLayout>
    </ScrollView>
</android.support.constraint.ConstraintLayout>

Я уже пробовал:

public static boolean setListViewHeightBasedOnItems(ListView listView) {
    ListAdapter listAdapter = listView.getAdapter();
    if (listAdapter != null) {
        int numberOfItems = listAdapter.getCount();
        // Get total height of all items.
        int totalItemsHeight = 0;
        for (int itemPos = 0; itemPos < numberOfItems; itemPos++) {
            View item = listAdapter.getView(itemPos, null, listView);
            item.measure(0, 0);
            totalItemsHeight += item.getMeasuredHeight();
        }
        // Get total height of all item dividers.
        int totalDividersHeight = listView.getDividerHeight() *
                (numberOfItems - 1);
        // Set list height.
        ViewGroup.LayoutParams params = listView.getLayoutParams();
        params.height = totalItemsHeight + totalDividersHeight;
        listView.setLayoutParams(params);
        listView.requestLayout();
        return true;
    } else {
        return false;
    }

и

public void setListViewHeightBasedOnChildren(ListView listView) {
        ListAdapter listAdapter = listView.getAdapter();
        if (listAdapter == null)
            return;
        int desiredWidth = View.MeasureSpec.makeMeasureSpec(listView.getWidth(), View.MeasureSpec.UNSPECIFIED);
        int totalHeight = 0;
        View view = null;
        int itemCount = listAdapter.getCount();
        for (int i = 0; i <= itemCount; i++) {
            view = listAdapter.getView(i, view, listView);
            if (i == 0)
                view.setLayoutParams(new ViewGroup.LayoutParams(desiredWidth, ViewGroup.LayoutParams.WRAP_CONTENT));
            view.measure(desiredWidth, View.MeasureSpec.UNSPECIFIED );
            totalHeight += view.getMeasuredHeight();
        }
        ViewGroup.LayoutParams params = listView.getLayoutParams();
        params.height = (totalHeight + (listView.getDividerHeight() * (itemCount - 1)));
        listView.setLayoutParams(params);
        listView.requestLayout();
    }

Ответы [ 2 ]

0 голосов
/ 12 января 2019

В моем случае единственное решение, которое я нашел, это поменять ListView с RecylerView;

0 голосов
/ 12 января 2019

То, что мне помогло иметь представление списка и возможность прокручивать его, - это иметь представление прокрутки в качестве родительского представления и иметь расположение ограничений внутри представления прокрутки.

...