2011-01-12 3 views
33

Inspiriert von Android Market, habe ich eine endlose Liste implementiert, die mehr Daten vom Server lädt, wenn wir das Ende der Liste erreichen.Android: Implementieren von progressbar und "loading ..." für Endless List wie Android Market

Nun, ich brauche die progressbar zu implementieren & "Loading .." Text als alt text

Beispielcode gezeigt Inspiration zu nehmen von wäre toll.

+0

Ich stecke in derselben kann jemand help..http: //stackoverflow.com/questions/ 28122304/endlos-scrolling-listview-not-working –

Antwort

5

Hier ist eine Lösung, die es auch einfach macht, eine Ladeansicht am Ende der ListView anzuzeigen, während sie geladen wird.

Sie können die Klassen sehen hier:

https://github.com/CyberEagle/OpenProjects/blob/master/android-projects/widgets/src/main/java/br/com/cybereagle/androidwidgets/helper/ListViewWithLoadingIndicatorHelper.java - Helper es möglich zu machen, um die Funktionen zu nutzen, ohne von SimpleListViewWithLoadingIndicator zu erstrecken.

https://github.com/CyberEagle/OpenProjects/blob/master/android-projects/widgets/src/main/java/br/com/cybereagle/androidwidgets/listener/EndlessScrollListener.java - Der Listener beginnt mit dem Laden von Daten, wenn der Benutzer gerade den unteren Rand des ListView erreicht.

https://github.com/CyberEagle/OpenProjects/blob/master/android-projects/widgets/src/main/java/br/com/cybereagle/androidwidgets/view/SimpleListViewWithLoadingIndicator.java - Die EndlessListView. Sie können diese Klasse direkt verwenden oder von ihr ausdehnen.

+0

Können Sie ein Beispiel hinzufügen, wie Sie es verwenden können? –

+0

brauchen Hilfe http://stackoverflow.com/questions/28122304/endless-scrolling-listview-not-working –

1

Fügen Sie dem ListView einen onScrollListener hinzu. Wenn der Benutzer scrollt, prüfen Sie, ob sich das ListView dem Ende nähert. Wenn ja, rufen Sie weitere Daten ab. Als Beispiel:

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); 
} 

Aktivität:

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 !!! 
       } 
      }); 
     } 
    } 

können Sie finden die vollständige Implementierung at this link