2012-10-12 50 views
5

Como se mencionó here, GridView.scrollTo() de Android no funciona. El método de la solución mencionada, setSelectedPosition, no parece existir en GridViewsoluciones para GridView.scrollTo()?

smoothScrollToPosition funciona, pero realmente no quiero la animación.

Por contexto, tengo CursorAdapter -backed GridView, y quiero que la vista se "reinicie", es decir, vaya hacia la parte superior, cuando cambie el cursor.

Respuesta

23

He estado usando setSelection(int position) para esto, y parece estar funcionando bien. Para desplazarse hacia la parte superior, simplemente use 0 para la posición.

A partir de los documentos:

Si en el modo de contacto, no se seleccionará el artículo pero que todavía se posiciona adecuadamente.

Editar: Añadido código para publicar setSelection como Ejecutable:

albumsView.post(new Runnable() { 
    @Override 
    public void run() { 
     albumsView.setSelection(0); 
    } 
}); 
+0

Lo he intentado, no tuve suerte. ¿Estás usando un CursorAdapter? Gracias de cualquier manera. – gatoatigrado

+0

No, solo una extensión BaseAdapter. ¿Lo estás intentando antes o después de cambiar los cursores? No estoy seguro de que marque la diferencia, pero no veo por qué usar un CursorAdapter en lugar de cualquier otra cosa podría hacer la diferencia cuando simplemente se desplaza. – Geobits

+0

¡Buena llamada, muchas gracias! Estuve jugando con esto durante mucho tiempo. (literalmente, horas y horas). Aparentemente hubo un problema cuando ambos llamaban a setSelection() y changeCursor(). El orden de setSelection() y changeCursor no importa (ambos fallan si solo se llama directamente en orden), pero funciona para publicar de nuevo setSelection() [http://pastebin.com/XmM5jqD3]. Por favor, actualice su respuesta con esa palabra :) – gatoatigrado

1

he encontrado que con el fin de utilizar de forma fiable gridView.setSelection (índice), tengo que llamar primero GridView. setAdapter() (incluso si el adaptador ya se ha configurado y no ha cambiado). Como tal:

gridView.setAdapter(gridAdapter); 
gridView.setSelection(index); 
+0

Llamar a setAdapter siempre dará como resultado la apariencia de desplazamiento hacia arriba a medida que el adaptador existente se extrae y lo reemplaza con uno nuevo. Esto es malo para el rendimiento y uno debe tratar de manipular el adaptador existente. – slott

+1

Wrong @slott. Si el adaptador ya está configurado, esto no dará lugar a un reinicio. No dije nada acerca de crear un nuevo adaptador o eliminar el anterior. Todo lo que dije fue que, en mi experiencia, tengo que volver a llamar a setAdapter * incluso si el adaptador ya se ha configurado * para que setSelection funcione de manera confiable. – mikejonesguy

+0

Probé los otros enfoques aquí y este es el único que funcionó. Estaba configurando un filtro en el adaptador y quería que gridview volviera a la parte superior. Aunque los datos se restablecieron correctamente, a veces la imagen mostraba una foto incorrecta en la vista de la imagen. Gracias @mikejonesguy – bkurzius

Cuestiones relacionadas