2011-09-30 24 views
5

Estoy usando TableLayout. que tienen 100 elementos para que sea desplazable. Uso Tablelayout dentro de ScrollView. Pero tengo que detectar si el usuario se desplazó a la última fila. Si el usuario se desplazó a la última vista, el usuario recibirá un mensaje de Toast. Pero cómo saber si el usuario se desplazó hasta la última fila de la tabla de diseño. He referido el código de TableLayout inside ScrollVie w.Cómo obtener la última posición de vista de desplazamiento, scrollview

http://huuah.com/using-tablelayout-on-android/

+0

¿por qué no No usas 'ListView' y' lv.setOnScrollListener() 'O echa un vistazo a [esta respuesta SO] (http://stackoverflow.com/questions/3948934/synchronise-scrollview-scroll-positions-android/3952629# 3952629) –

+0

No puedo usar listview porque. el proyecto ya está desarrollado. tiene impacto en diferentes lugares – bapi

+0

intente mirar el método OnScrolled .. – Rejinderi

Respuesta

13

Si enrolló la nueva posición y la altura de desplazamiento + ver altura> = tableview que significa haber llegado al final de la lista.

Para lograr esto, debe escribir su vista de desplazamiento custiom.

Paso-1 Tienes que crear la vista de desplazamiento a medida que se extiende 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 detector para detectar scrollchanged

paquete com.sunil; import LDObservableScrollView;

public interface LDObservableScrollViewListener { 

    void onScrollChanged(LDObservableScrollView scrollView, int x, int y, int oldx, int oldy); 

} 

Paso-3 en xml diseño en lugar de ScrollView utilizar la vista de desplazamiento personalizadas

<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 en la que desea detectar el evento de desplazamiento utilizar el follwoing 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 ::"); 
     } 
    } 
+0

Gracias, funcionó para mí – bapi

1

Esto también trabajó para mí, pero mi y valor en el onScrollChanged Nunca g es más alto que la altura en mi Samsung Galaxy Tab 2 7 ". Pero funciona en el Galaxy Tab 2 10.1" Cualquier idea por qué?

[Editar] que he visto ahora que esto ocurre cuando la pantalla es inferior a una cierta altura, 1000px por ejemplo. Porque cuando hizo el contenido de mi desplazamiento inferior a 1200 en la pestaña Galaxy de 10.1 ", dejó de funcionar para la máxima detección de altura.

[Editar] que he encontrado la solución, no se detecta el tamaño del rollo correctamente, con el fin de 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); 
} 
Cuestiones relacionadas