vertical paginacion net horizontal fijar encabezado con asp android gridview scroll position scroll-offset

android - paginacion - ¿Cómo obtener la posición de desplazamiento desde GridView?



scroll gridview c# (2)

Estoy tratando de construir mis propias funciones de vista de cuadrícula, extendiéndome en GridView . Lo único que no puedo resolver es cómo obtener la posición de desplazamiento actual de GridView .

getScrollY() siempre devuelve 0, y los parámetros de onScrollListener son solo un rango de vistas secundarias visibles, no la posición de desplazamiento real.

Esto no parece muy difícil, pero simplemente no puedo encontrar una solución en la web.

¿Alguien aquí que tenga una idea?


En Gingerbread, GridView getScrollY () funciona en algunas situaciones y en otras no. Aquí hay una alternativa basada en la primera respuesta. La altura de la fila y el número de columnas deben conocerse (y todas las filas deben tener la misma altura):

public int getGridScrollY() { int pos, itemY = 0; View view; pos = getFirstVisiblePosition(); view = getChildAt(0); if(view != null) itemY = view.getTop(); return YFromPos(pos) - itemY; } private int YFromPos(int pos) { int row = pos / m_numColumns; if(pos - row * m_numColumns > 0) ++row; return row * m_rowHeight; }

La primera respuesta también da una buena pista sobre cómo desplazar con píxeles un GridView. Aquí hay una solución generalizada, que desplazará un GridView equivalente a scrollTo (0, scrollY):

public void scrollGridToY(int scrollY) { int row, off, oldOff, oldY, item; // calc old offset: oldY = getScrollY(); // getGridScrollY() will not work here row = oldY / m_rowHeight; oldOff = oldY - row * m_rowHeight; // calc new offset and item: row = scrollY / m_rowHeight; off = scrollY - row * m_rowHeight; item = row * m_numColumns; setSelection(item); scrollBy(0, off - oldOff); }

Las funciones se implementan dentro de un GridView subclasificado, pero se pueden recodificar fácilmente como externas.


No encontré ninguna buena solución, pero esta es al menos capaz de mantener el tipo de píxel de posición de desplazamiento perfectamente:

int offset = (int)(<your vertical spacing in dp> * getResources().getDisplayMetrics().density); int index = mGrid.getFirstVisiblePosition(); final View first = container.getChildAt(0); if (null != first) { offset -= first.getTop(); } // Destroy the position through rotation or whatever here! mGrid.setSelection(index); mGrid.scrollBy(0, offset);

Por eso no puede obtener una posición de desplazamiento absoluta, sino un elemento visible + par de desplazamiento.

NOTAS:

  • Esto es para API 8+.
  • Puede obtener con mGrid.getVerticalSpacing () en API 16+.
  • Puede usar mGrid.smoothScrollToPositionFromTop (index, offset) en API 11+ en lugar de las dos últimas líneas.

Espero que te ayude y te dé una idea.