2010-06-01 14 views
25

Tengo problemas de desplazamiento extraños en mi GridView bastante simple. Cada elemento en la cuadrícula es simplemente un ImageView y un TextView. La actividad en sí es simplemente un selector de aplicaciones. Parece una versión aproximada de la bandeja de aplicaciones básica en Android.Desplazamiento de problemas con GridView en Android

El problema es que después de pasar algunas veces desplazándome por mi vista, inevitablemente me permitirá continuar pasando la fila superior de iconos, a una pantalla en blanco, y la barra de desplazamiento desaparecerá, dejándome atascado.

No ocurre cada vez que voy a la parte superior de la vista, solo algunas veces, y generalmente solo después de un desplazamiento excesivo.

Si me doy cuenta del problema y lo veo antes de que la fila superior desaparezca de la parte inferior de la pantalla, normalmente puedo retroceder por la vista y detectar algunos iconos que faltan. Hay espacios vacíos en la cuadrícula, y solo puedo suponer que esos iconos se han movido a una posición extraña, lo que permite que la vista se desplace más allá de la parte superior.

Esta es mi primera aplicación de Android más allá de un Hello World básico, por lo que es probable que haya arruinado algo en mis archivos de diseño. También me doy cuenta de que esta es probablemente una descripción bastante confusa, así que espero que alguien haya experimentado esto y mis habilidades de búsqueda simplemente no pudieron encontrarlo.

Puedo publicar mis archivos de diseño u otro código si alguien piensa que es útil.

Ah, y el programa está construido contra 1.5, pero se está ejecutando en 2.2 (cualquiera sea el estado de 2.2 que se escapó la semana pasada) en mi teléfono. No tengo suficientes aplicaciones para probar esto en un emulador, pero probablemente podría configurar algo si alguien lo considerara necesario.

Gracias de antemano por cualquier ayuda sobre el tema.

+0

Por favor, publique el código para 1) su actividad/lista/diseño del ítem y 2) su código de adaptador –

+0

puede resolverlo, respondo a esta pregunta – pengwang

Respuesta

1

Parece que si se desplaza por la parte inferior de la vista de cuadrícula y regresa muy rápido un par de veces, eventualmente notará que los elementos de la vista se desplazan un lugar a la "izquierda" desde donde originalmente estaban . Cuando esto sucede, puede desplazarse completamente desde la parte superior de GridView. Cuando llega a la parte superior de la lista, no se muestra el elemento 0, teniendo el elemento 1 en su lugar y nada más que negrura por encima de esa fila.

Al hacer clic en cualquier elemento en esta situación, se restablece la lista y todo vuelve a la normalidad.

Esto debe ser un error. Es altamente reproducible, y no creo que nada de lo que estoy haciendo esté causando la confusión. En este punto, se ha detenido agregar al adaptador de lista.

Ahora mismo estoy trabajando con Android 2.3.3.

+0

"En este punto, agregar a la lista el adaptador se ha detenido." ¿Puede dar me more detail.i meet this question http://stackoverflow.com/questions/5944250/gridview-cannot-show-image – pengwang

7

que tenía el mismo problema, pero a publicar GridView sólo ImageView 's así que la respuesta de Pengwang no me ayuda. Encontré una explicación para este error https://code.google.com/p/android/issues/detail?id=16218

El problema es que GridView no maneja actualmente elementos con diferentes alturas.

Mi solución es utilizar exactamente el layout_height especificado para todos los artículos de GridView.

+0

Gracias por este. Síntomas impares. –

+0

Gracias, esto me ayudó a resolver un problema similar. Primero, agrego algunos 'TextView's y' Button' programmenicamente desde 'getView (posición int final, View convertView, ViewGroup parent)' Luego uso un 'getViewTreeObserver(). AddOnGlobalLayoutListener (new ViewTreeObserver.OnGlobalLayoutListener() { ...} 'para obtener la altura máxima por cada fila. Finalmente. Utilicé la última posición de la columna para configurar cada altura del niño usando' viewGroup.getChildAt (position) 'para moverme entre' View''s en cada fila. – ArtiomLK

0

Me acabo de topar con este mismo problema: tengo una grilla de imágenes que tienen diferentes alturas. Después de leer el doc de los desarrolladores de Android en GridView, GridView.LayoutParams y GridLayout, hice dos cosas que arreglar mi problema:

  1. encontrar la imagen más alto de cada fila, y almacenar la altura en un mapa de la fila -> altura de la fila. Cada imagen que descargo tiene información de ancho y alto, así que esto es fácil para mí reemplazando el método addAll (items) de mi adaptador.

  2. en getView(), creo un GridView.LayoutParams (MATCH_PARENT, getRowHeight (position)), que establece cada elemento de la grilla al alto de fila máxima para su fila específica.

  3. envuelvo mi ImageView dentro de LinearLayout. He intentado otro diseño, pero LinearLayout es el que funciona. Establezca android: scaleType = "fitCenter" y android: adjustViewBounds = "true" para la vista de la imagen.

Después de 3 pasos anteriores que finalmente me dieron la cuadrícula para mirar a la derecha, tienen diferentes alturas, y no hay problemas de desplazamiento.

Cuestiones relacionadas