Cómo obtener la última posición de vista de desplazamiento, vista de desplazamiento
Estoy utilizando TableLayout. Que tienen 100 de elementos para hacerla desplazable Estoy usando Tablelayout dentro de ScrollView. Pero tengo que detectar si el usuario ha desplazado a la última fila. Si el usuario ha desplazado a la última vista, se mostrará al usuario un mensaje Toast. Pero cómo saber que el usuario ha desplazado a la última fila de la tablelayout. He referido el código de TableLayout dentro de ScrollVie w.
Http://huuah.com/using-tablelayout-on-android/
- Android TableLayout: preserva los anchos de las columnas entre las diferentes tablas
- Emulador Android no Desplácese hacia abajo
- Crash de la aplicación Android en la creación de tablelayout dinámico
- Android: TableLayout alinear la primera columna a la derecha, la segunda a la izquierda
- Android - Elementos de la interfaz de usuario desactivados
- ¿Cómo aplicar span de fila en tablelayout?
- rendimiento de tablelayout ultra-lento
- 'La previsualización se agotó al renderizar el bucle de diseño infinito o la recursión ilimitada' cuando duplicaba algunos TableRows
- Desplácese hasta la última línea de TableLayout dentro de ScrollView
- Android: dos problemas con Tablerow + TextView en Tablelayout
- Crear TableLayout mediante programación
- Android TableRow - ¿Cómo agregar Ver dinámicamente a cierto postion?
- Diseño de cuadrícula vs. Diseño de la tabla
Si la nueva posición y desplazada + la altura de la vista de desplazamiento> = altura de la tabla que significa que ha llegado al final de la lista.
Para lograr esto tienes que escribir tu custiom scrollview.
Paso-1 Tienes que crear una vista de desplazamiento personalizada extendiendo ScrollView
package com.sunil; import android.content.Context; import android.util.AttributeSet; import android.widget.ScrollView; public class LDObservableScrollView extends ScrollView { private LDObservableScrollViewListener scrollViewListener = null; public LDObservableScrollView(Context context) { super(context); } public LDObservableScrollView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } public LDObservableScrollView(Context context, AttributeSet attrs) { super(context, attrs); } public void setScrollViewListener(LDObservableScrollViewListener scrollViewListener) { this.scrollViewListener = scrollViewListener; } @Override protected void onScrollChanged(int x, int y, int oldx, int oldy) { super.onScrollChanged(x, y, oldx, oldy); if(scrollViewListener != null) { scrollViewListener.onScrollChanged(this, x, y, oldx, oldy); } } }
Paso-2 Crear un Listener para detectar cambios en el desplazamiento
Paquete com.sunil; Import LDObservableScrollView;
public interface LDObservableScrollViewListener { void onScrollChanged(LDObservableScrollView scrollView, int x, int y, int oldx, int oldy); }
Paso 3 en el diseño xml en lugar de ScrollView utilizar la vista de desplazamiento personalizado
<com.abc.LDObservableScrollView android:layout_width="fill_parent" android:layout_marginTop="1dip" android:id="@+id/OLF_ScrollView" android:layout_height="fill_parent" android:background="@drawable/small_list_back"> <TableLayout android:layout_width="fill_parent" android:id="@+id/OLF_tableLayout_TableLayout" android:layout_height="fill_parent"> </TableLayout> </com.abc.LDObservableScrollView>
Paso-4 En su clase de actividad o donde desea detectar el evento de desplazamiento utilice el siguiente código
public class DetectHere implements LDObservableScrollViewListener{ ... LDObservableScrollView scrollView = (LDObservableScrollView)view.findViewById(R.id.OLF_ScrollView); scrollView.setScrollViewListener(this); ..... @Override public void onScrollChanged(LDObservableScrollView scrollView, int x, int y, int oldx, int oldy) { // TODO Auto-generated method stub if((scrollView.getHeight()+y) >= tableLayout.getHeight()){ Log.e("Custom Listener ", "END OF LIST OCCURRED ::"); } }
Esto también funcionó para mí, pero mi valor de y en el onScrollChanged nunca llega más alto que la altura de mi Samsung Galaxy Tab 2 7 ". Pero funciona en la pestaña galaxia 2 10.1" ¿Alguna idea por qué?
[Editar] He visto ahora que esto ocurre cuando la pantalla es menor que una cierta altura, 1000px por ejemplo. Porque cuando hice el contenido de mi pergamino menos de 1200 en la lengüeta de la galaxia 10.1 ", paró el trabajar para la detección máxima de la altura.
[Editar] He encontrado la solución, no estaba detectando el tamaño del rollo correctamente, para hacer eso, lo que he hecho fue el siguiente:
protected void onScrollChanged(int horizontalScrollPosition, int verticalScrollPosition, int previousHorizontalScrollPosition, int previousVerticalScrollPosition) { int scrollTotalHeight = this.getChildAt(0).getHeight() - super.getHeight(); if(_previousImage != null) if(verticalScrollPosition <= 0) _previousImage.setVisibility(View.GONE); if(_nextImage != null) if(verticalScrollPosition >= scrollTotalHeight) _nextImage.setVisibility(View.GONE); super.onScrollChanged(horizontalScrollPosition, verticalScrollPosition, previousHorizontalScrollPosition, previousVerticalScrollPosition); }