Ответ 1
Добавление их в ListView, поскольку первый элемент кажется довольно хорошим решением.
Чтобы сделать невозможным выбор вида, просто получите представление и .setClickable(false)
.
Я хочу показать экран профиля для моих пользователей.
Он должен иметь три представления (2 Buttons
и a ImageView
) и ListView
, чтобы отобразить содержимое, сделанное этим пользователем.
Однако я не хочу прокручивать ListView
. Вместо этого я хочу, чтобы он был таким же большим, насколько необходимо, и чтобы все мои взгляды находились внутри ScrollView
, поэтому три первых вида прокручиваются с помощью ListView
. Это, конечно, не работает должным образом.
Все мои три элемента находятся внутри LinearLayout
. Я думал о том, чтобы сделать их первым элементом в ListView
, но это приводит к тому, что они выбираются как первый элемент и должны делать некоторые ненужные кодировки.
Есть ли способ сделать это простым способом или мне придется придерживаться того, что Layout первый элемент в моем ListView?
Добавление их в ListView, поскольку первый элемент кажется довольно хорошим решением.
Чтобы сделать невозможным выбор вида, просто получите представление и .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);
пожалуйста, проверьте
Я добавил бы 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"/>
Это работает для меня...