Как создать ListView, которого нет в ScrollView, или если ScrollView отключен?

StackOverflow https://stackoverflow.com/questions/2419246

  •  19-09-2019
  •  | 
  •  

Вопрос

Мне нужны некоторые преимущества ListView, например возможность использовать ListAdapter, выбор элементов и т. д., но мне не нужна часть ScrollView.Я хочу реализовать эту часть сам, по-другому (почему и как я это делаю, на самом деле не суть этого вопроса, поэтому, пожалуйста, не спрашивайте «почему»).

Есть ли способ создать ListView, которого нет в ScrollView, или отключить прокрутку?

Это было полезно?

Решение

А ListView не в ScrollViewListView выполняет прокрутку по своей сути.Я не верю, что можно отключить прокрутку с помощью простого API.Если да, то ваш выбор — либо создать подкласс ListView и попытаться найти способы переопределить поведение прокрутки, клонировать ListView и устраните поведение прокрутки или напишите свое собственное AdapterView это делает вещи так, как вы хотите.

Другие советы

Другой способ сделать это — обернуть ListView в любом специальном решении для прокрутки, которое вы придумали.Если вы просто установите высоту ListView быть точно такой же высоты, как и все строки (используя представление списка LayoutParams), тогда оно будет вести себя как обычное представление и не сможет прокручиваться;поэтому вы можете добавить его в другое представление прокрутки.Трудность этого метода заключается в том, что вам нужно заранее знать высоту списка, поэтому вам нужно знать высоту каждой строки.Кроме того, при этом будут созданы все строки одновременно, и вы не сможете воспользоваться функцией повторного использования представления.

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

// Calculate height of the entire list by providing a very large 
// height hint.  But do not use the highest 2 bits of this integer; 
//  those are reserved for the MeasureSpec mode.
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
        MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top