¿Cómo se crea un ListView que no está en un ScrollView, o tiene desactivada la ScrollView?
-
19-09-2019 - |
Pregunta
Quiero algunas de las golosinas en un ListView, como ser capaz de utilizar un ListAdapter y selección de elementos, etc, pero no quiero que la parte ScrollView de ella. Quiero poner en práctica esa parte a mí mismo, de una manera diferente (por qué o cómo hacer esto no es realmente el punto de esta pregunta, así que por favor no pregunte "por qué").
¿Hay una manera de tener un ListView que no está en un ScrollView o ha desactivado el desplazamiento?
Solución
A ListView
no está en una ScrollView
. Un ListView
no intrínsecamente desplazamiento. No creo que se puede desactivar el desplazamiento a través de una API sencilla. Si es así, sus opciones son o subclase ListView
y tratar de encontrar la manera de anular el desplazamiento comportamientos, ListView
clon de desplazamiento y eliminar comportamientos, o escribir su propio AdapterView
que hace las cosas de la manera deseada.
Otros consejos
Otra manera de hacer esto es envolver el ListView
en cualquier solución de desplazamiento personalizada que ha cocinado para arriba. Si sólo tiene que establecer la altura de la ListView
ser exactamente tan alto como todas las filas (usando LayoutParams
de la vista de lista), a continuación, se comporta como una vista normal y no será capaz de desplazarse; Por lo tanto, puede agregarlo a otra vista de desplazamiento. La dificultad de este método es que usted tiene que saber la altura de su lista antes de tiempo, por lo que tiene que saber la altura de cada fila. Además, esto va a crear todas las filas a la vez y por lo que no será capaz de tomar ventaja de la función de visualización de reciclaje.
Si usted no tiene una forma sencilla de calcular la altura antes de tiempo, se puede engañar a la ListView
para que lo hiciera para usted reemplazando onMeasure
y dándole su propia especificación de altura:
// 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);