Отключить прокрутку ListView, содержащегося в ScrollView

Я хочу показать экран профиля для моих пользователей.

Он должен иметь три представления (2 Buttons и a ImageView) и ListView, чтобы отобразить содержимое, сделанное этим пользователем.

Однако я не хочу прокручивать ListView. Вместо этого я хочу, чтобы он был таким же большим, насколько необходимо, и чтобы все мои взгляды находились внутри ScrollView, поэтому три первых вида прокручиваются с помощью ListView. Это, конечно, не работает должным образом.

Все мои три элемента находятся внутри LinearLayout. Я думал о том, чтобы сделать их первым элементом в ListView, но это приводит к тому, что они выбираются как первый элемент и должны делать некоторые ненужные кодировки.

Есть ли способ сделать это простым способом или мне придется придерживаться того, что Layout первый элемент в моем ListView?

Ответ 1

Добавление их в ListView, поскольку первый элемент кажется довольно хорошим решением.

Чтобы сделать невозможным выбор вида, просто получите представление и .setClickable(false).

Ответ 2

Я нашел для этого очень простое решение. Просто получите адаптер списка и вычислите его размер, когда будут показаны все элементы. Преимущество заключается в том, что это решение также работает внутри ScrollView.

Пример:

public static void justifyListViewHeightBasedOnChildren (ListView listView) {

    ListAdapter adapter = listView.getAdapter();

    if (adapter == null) {
        return;
    }
    ViewGroup vg = listView;
    int totalHeight = 0;
    for (int i = 0; i < adapter.getCount(); i++) {
        View listItem = adapter.getView(i, null, vg);
        listItem.measure(0, 0);
        totalHeight += listItem.getMeasuredHeight();
    }

    ViewGroup.LayoutParams par = listView.getLayoutParams();
    par.height = totalHeight + (listView.getDividerHeight() * (adapter.getCount() - 1));
    listView.setLayoutParams(par);
    listView.requestLayout();
}

Вызов этой функции, проходящей через объект ListView:

justifyListViewHeightBasedOnChildren(myListview);

Функция, показанная выше, является модификацией сообщения в: Отключить прокрутку списка в списке

Обратите внимание, чтобы вызвать эту функцию после того, как вы установили адаптер в список. Если размер элементов в адаптере изменился, вам также нужно вызвать эту функцию.

Ответ 4

Я добавил бы View с невидимым фоном поверх ListView. Установите для него View.OnTouchListener(). И используйте событие true в onTouch() методе View.OnTouchListener().

Если вы хотите, чтобы список снова прокручивался, удалите сенсорный приемник, установленный на прозрачном View

Ответ 5

Я думаю, что лучшим способом было бы разместить 2 кнопки и изображение в LinearLayout (или любой макет, который соответствует вашим потребностям), и добавить этот макет в виде заголовка списка с помощью метода addHeaderView:

http://developer.android.com/reference/android/widget/ListView.html#addHeaderView(android.view.View)

Ответ 6

если вам нужно показать ограниченное количество элементов в представлении списка и хотите остановить просмотр списка из прокрутки, вы должны сохранить высоту списка, превышающую общую высоту элементов.

например, вы хотите показать 3 элемента. (высота строки - 30). тогда общая высота предметов становится 3 x 30dp = 90dp,

теперь вам нужно установить высоту списка, превышающую 90. Например: 100dp. поэтому теперь ваш список не будет прокручиваться в любом случае.

Ответ 7

В вашем xml файле просто поместите

<listview android:nestedScrolling="false"/>

Это работает для меня...