2011-01-12 10 views
33

Inspirándome en Android Market, he implementado una lista sin fin que carga más datos del servidor cuando llegamos al final de la lista.Android: Implementando la barra de progreso y "cargando ..." para la lista sin fin como Android Market

Ahora, necesito para implementar el progressbar & "Cargando .." texto como se muestra alt text

Código de ejemplo para inspirarse sería grande.

+0

estoy atorado en el mismo puede help..http nadie: //stackoverflow.com/questions/ 28122304/endless-scrolling-listview-not-working –

Respuesta

5

Aquí hay una solución que también hace que sea fácil mostrar una vista de carga al final del ListView mientras se carga.

Puede ver las clases aquí:

https://github.com/CyberEagle/OpenProjects/blob/master/android-projects/widgets/src/main/java/br/com/cybereagle/androidwidgets/helper/ListViewWithLoadingIndicatorHelper.java - ayudante para que sea posible el uso de las características sin que se extiende desde SimpleListViewWithLoadingIndicator.

https://github.com/CyberEagle/OpenProjects/blob/master/android-projects/widgets/src/main/java/br/com/cybereagle/androidwidgets/listener/EndlessScrollListener.java - Escucha que comienza a cargar datos cuando el usuario está a punto de llegar al final de ListView.

https://github.com/CyberEagle/OpenProjects/blob/master/android-projects/widgets/src/main/java/br/com/cybereagle/androidwidgets/view/SimpleListViewWithLoadingIndicator.java - The EndlessListView. Puedes usar esta clase directamente o extender desde ella.

+0

¿Puede agregar algún ejemplo sobre cómo usarlo? –

+0

necesita ayuda http://stackoverflow.com/questions/28122304/endless-scrolling-listview-not-working –

1

Agregue onScrollListener al ListView. Cuando el usuario se desplaza, verifique si el ListView está llegando a su final. Si es así, entonces obtenga más datos. A modo de ejemplo:

public abstract class LazyLoader implements AbsListView.OnScrollListener { 

    private static final int DEFAULT_THRESHOLD = 10 ; 

    private boolean loading = true ; 
    private int previousTotal = 0 ; 
    private int threshold = DEFAULT_THRESHOLD ; 

    public LazyLoader() {} 

    public LazyLoader(int threshold) { 
     this.threshold = threshold; 
    } 

    @Override 
    public void onScrollStateChanged(AbsListView view, int scrollState) { 
    } 

    @Override 
    public void onScroll(AbsListView view, int firstVisibleItem, 
         int visibleItemCount, int totalItemCount) { 
     if(loading) { 
      if(totalItemCount > previousTotal) { 
       // the loading has finished 
       loading = false ; 
       previousTotal = totalItemCount ; 
      } 
     } 

     // check if the List needs more data 
     if(!loading && ((firstVisibleItem + visibleItemCount) >= (totalItemCount - threshold))) { 
      loading = true ; 

      // List needs more data. Go fetch !! 
      loadMore(view, firstVisibleItem, 
        visibleItemCount, totalItemCount); 
     } 
    } 

    // Called when the user is nearing the end of the ListView 
    // and the ListView is ready to add more items. 
    public abstract void loadMore(AbsListView view, int firstVisibleItem, 
            int visibleItemCount, int totalItemCount); 
} 

Actividad:

public class MainActivity extends AppCompatActivity { 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 

      setContentView(R.layout.main_layout); 
      ListView listView = (ListView) findViewById(R.id.listView); 

      listView.setOnScrollListener(new LazyLoader() { 
       @Override 
       public void loadMore(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { 
        // Fetch your data here !!! 
       } 
      }); 
     } 
    } 

Usted puede encontrar la aplicación completa at this link

Cuestiones relacionadas