El objetivo es implementar una galería cuyo adaptador devuelva ListViews (en otras palabras, desplazamiento vertical de ListViews incrustado en una galería de desplazamiento horizontal). De alguna manera funciona después de un poco de trabajo, pero cuando se intenta desplazar horizontalmente, el ListView se ve muy nervioso, como si hubiera algo de pegajoso al estar centrado. No he observado este tipo de comportamiento con ningún otro tipo de Vista incrustada en una Galería.Incrustar ListView dentro de la galería
Esto es lo que he intentado:
Inicialmente, me encontré con que el ListView aplastada eventos de toque, por lo que el oyente gesto en la galería no es despedido.
Así que en el método onCreate() de la actividad, he creado un GestureDetector:
galleryGestureDetector = new GestureDetector(this, gallery);
Entonces, dentro del método getView() del adaptador Galería, después de que el ListView se ha inflado y configurado , tengo algo de código como este:
listView.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
galleryGestureDetector.onTouchEvent(event);
return true;
}
});
En este caso, incluso he ido a la medida extrema de retornar verdadero de lo OnTouchListener para asegurar que el método onTouchEvent() de la vista de lista no se llama en realidad. El mismo comportamiento nervioso ocurre. Como resultado, creo que puedo descartar competir en las implementaciones de TouchEvent() entre las dos vistas.
Intenté abusar del concepto TouchDelegate al extender el rectángulo táctil de la Galería para incluir el ListView y luego forzar el ListView para delegarlo, pero esto también fue un esfuerzo inútil.
¡Yo levantaría las manos y diría que no es posible actualmente, pero la aplicación de red social que viene con el DroidX de alguna manera lo logra!
Quizás compruebe que sus vistas de lista no están creando/inflando toneladas de vistas cada vez que se representa la galería. Intente guardarlos en la memoria caché (o simplemente usando un solo campo estático) solo para ver si ese es el problema. – monkjack
Bueno, pensó monkjack, y de hecho, parece que la Galería estaba reciclando las ListViews devueltas de su adaptador después de que salieran de la selección. Intenté almacenar en caché las vistas como sugirió y verifiqué que de los 3 elementos que estoy usando para probar soluciones a este problema, solo se han inflado 3 vistas. Desafortunadamente, veo el mismo resultado ... Después de que la vista se desliza en una pequeña cantidad, comienza a agitarse como loca. – jkschneider
Aún más misterioso: hoy noté que si sigo intentando desplazarme horizontalmente después de que ListView comience a agitarse, la Galería a veces se quedará atascada entre dos Vistas. – jkschneider