¿Cómo desencadenar un evento cuando scrollView alcanza la parte inferior con Android?

Im que busca un acontecimiento que puedo utilizar en el scrollView para ser encendido cuando el usuario ha hecho scroll al fondo.

Por ejemplo, mi lista de elementos debe ampliarse con más elementos de forma automática.

¿Alguna idea de cómo se puede hacer esto?

Soy thanksfull para cualquier extremidad.

4 Solutions collect form web for “¿Cómo desencadenar un evento cuando scrollView alcanza la parte inferior con Android?”

Por favor, lea este artículo: Android: Comprensión de cuando Scrollview ha alcanzado el fondo

Código fuente:

@Override protected void onScrollChanged(int l, int t, int oldl, int oldt) { // Grab the last child placed in the ScrollView, we need it to determinate the bottom position. View view = (View) getChildAt(getChildCount()-1); // Calculate the scrolldiff int diff = (view.getBottom()-(getHeight()+getScrollY())); // if diff is zero, then the bottom has been reached if( diff == 0 ) { // notify that we have reached the bottom Log.d(ScrollTest.LOG_TAG, "MyScrollView: Bottom has been reached" ); } super.onScrollChanged(l, t, oldl, oldt); } 

Si lo desea, puede agregar make a widget personalizado.

Ejemplo:

 package se.marteinn.ui; import android.content.Context; import android.util.AttributeSet; import android.view.View; import android.widget.ScrollView; /** * Triggers a event when scrolling reaches bottom. * * Created by martinsandstrom on 2010-05-12. * Updated by martinsandstrom on 2014-07-22. * * Usage: * * scrollView.setOnBottomReachedListener( * new InteractiveScrollView.OnBottomReachedListener() { * @Override * public void onBottomReached() { * // do something * } * } * ); * * * Include in layout: * * <se.marteinn.ui.InteractiveScrollView * android:layout_width="match_parent" * android:layout_height="match_parent" /> * */ public class InteractiveScrollView extends ScrollView { OnBottomReachedListener mListener; public InteractiveScrollView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } public InteractiveScrollView(Context context, AttributeSet attrs) { super(context, attrs); } public InteractiveScrollView(Context context) { super(context); } @Override protected void onScrollChanged(int l, int t, int oldl, int oldt) { View view = (View) getChildAt(getChildCount()-1); int diff = (view.getBottom()-(getHeight()+getScrollY())); if (diff == 0 && mListener != null) { mListener.onBottomReached(); } super.onScrollChanged(l, t, oldl, oldt); } // Getters & Setters public OnBottomReachedListener getOnBottomReachedListener() { return mListener; } public void setOnBottomReachedListener( OnBottomReachedListener onBottomReachedListener) { mListener = onBottomReachedListener; } /** * Event listener. */ public interface OnBottomReachedListener{ public void onBottomReached(); } } 

Dado los requisitos, es probable que esté extendiendo BaseAdapter (a diferencia de CursorAdapter que utiliza un mecanismo diferente).

He aquí un fragmento para eso:

 public View getView(int position, View convertView, ViewGroup parent) { if (position == backingLinkedList.size()) { //get more items and add them to the backingLinkedList in a background thread notifyDataSetChanged(); } } 

Tuve el mismo problema y lo resolví mediante el uso de ListView (agrega automáticamente ScrollView si es necesario) y la configuración de OnScrollListener .

Aquí hay un ejemplo de código:

  tableListView.setOnScrollListener(new OnScrollListener() { public void onScrollStateChanged(AbsListView view, int scrollState) { } public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { if (visibleItemCount == totalItemCount) // too little items (ScrollView not needed) { java.lang.System.out.println("too little items to use a ScrollView!"); } else { if ((firstVisibleItem + visibleItemCount) == totalItemCount) { // put your stuff here java.lang.System.out.println("end of the line reached!"); } } } }); 

Aquí es una solución mucho más simple sin tener que subclase vista de desplazamiento. Suponiendo que tiene una variable RecyclerView recyclerView,

RecyclerView.computeVerticalScrollRange () le ofrece el rango de desplazamiento completo, o en otras palabras, la altura del contenido.

(RecyclerView.computeVerticalScrollOffset () da el desplazamiento de la parte superior a medida que se desplaza.Este valor continuará hasta la altura del contenido – altura de la vista de desplazamiento.

Asi que,

  if( (recyclerView.computeVerticalScrollOffset() == (recyclerView.computeVerticalScrollRange() - recyclerView.getHeight()) ) { // You have hit rock bottom. } 

Manipular la vista secundaria de la vista de desplazamiento sólo parece tan hacky.

  • Configuración de TextView visible desde otro hilo o BeginInvoke en Android
  • Un marco EventBus para Android
  • SensorEventListener en un hilo separado
  • Obtener instancia de la actividad actualmente en ejecución?
  • Cordova Plugin para pasar el keycode de un evento keyUp a la aplicación
  • Maneje los clics del audífono bluetooth (ACTION_VOICE_COMMAND y ACTION_WEB_SEARCH) en Android
  • Cómo crear un evento de clic para niños en la lista expandible
  • Cómo enviar evento de puntero en Android
  • Cómo añadir un evento en un calendario para Android
  • Androide ndk multitouch
  • Javascript: ¿Hay alguna solución para que Chrome para Android dispare a los oyentes de touchmove y touchend que no usen event.preventDefault ()?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.