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

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

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

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

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

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

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

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

Я нашел очень простое решение для этого. Просто получите адаптер списка и вычислите его размер, когда будут показаны все элементы. Преимущество заключается в том, что это решение также работает внутри 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); 

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

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

Вы можете это сделать

 listView.setScrollContainer(false); 

Для более пожалуйста проверяйте

Как получить прокручиваемый ListView?

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

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

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

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

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

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

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

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

 <listview android:nestedScrolling="false"/> 

Меня устраивает…