non inside dentro android listview scrollview

inside - listview scroll android



Deshabilitar el desplazamiento de un ListView contenido dentro de un ScrollView (8)

Quiero mostrar una pantalla de perfil para mis usuarios.

Debe tener tres vistas (2 Buttons y un ImageView ) y un ListView para mostrar el contenido creado por ese usuario.

Sin embargo, no quiero que ListView desplace. En su lugar, quiero que sea tan grande como sea necesario, y poner todas mis vistas dentro de una ScrollView , por lo que las tres primeras vistas se desplazan con el ListView . Esto, por supuesto, no funciona como se esperaba.

Todos mis tres elementos están dentro de LinearLayout . Pensé en convertirlos en el primer elemento de ListView , pero esto hace que puedan seleccionarse como el primer elemento y tener que hacer una codificación innecesaria.

¿Hay alguna manera de hacerlo de la manera más fácil o tendré que conformarme con hacer que el diseño sea el primer elemento en mi ListView?


Agregaría una View con fondo invisible encima de ListView . Establezca una View.OnTouchListener() en ella. Y consuma el evento volviendo true en el método View.OnTouchListener() de View.OnTouchListener() .

Cuando desee que la lista vuelva a desplazarse, elimine el conjunto de escucha táctil de la View transparente.


Agregarlos al ListView como primer elemento parece una solución bastante buena.

Para hacer que la Vista no se .setClickable(false) seleccionar solo tiene que obtener la vista y .setClickable(false) .



En tu archivo xml acaba de poner

<listview android:nestedScrolling="false"/>

Esto funciona para mi...


Encontré una solución muy simple para esto. Simplemente obtenga el adaptador de la vista de lista y calcule su tamaño cuando se muestren todos los elementos. La ventaja es que esta solución también funciona dentro de ScrollView.

Ejemplo:

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(); }

Llame a esta función pasando por su objeto ListView:

justifyListViewHeightBasedOnChildren(myListview);

La función que se muestra arriba es una modificación de una publicación en: Deshabilitar el desplazamiento en lista

Tenga en cuenta que debe llamar a esta función después de haber configurado el adaptador en la vista de lista. Si el tamaño de las entradas en el adaptador ha cambiado, debe llamar a esta función también.



con la siguiente instrucción:

name_lista.getLayoutParams (). height = new_size

new_size es una variable que calculará de acuerdo con la cantidad de elementos de su lista, por ejemplo:

new_size = 100 * list_size;


si tiene que mostrar una cantidad limitada de elementos en la vista de lista y desea detener el desplazamiento de la vista de lista, debe mantener una altura de vista de lista mayor que la altura total de los elementos.

por ejemplo, desea mostrar 3 elementos. (altura de la fila es 30). luego la altura total de los artículos se convierte en 3 x 30dp = 90dp,

por lo que ahora debe establecer una altura de vista de lista superior a 90. Por ejemplo: 100dp. así que ahora su vista de lista no se desplazará en ningún caso.