2011-01-12 11 views
33

Inspirując się Android Market, zaimplementowałem listę Endless, która ładuje więcej danych z serwera, gdy docieramy do końca listy.Android: Wdrażanie paska postępu i "ładowanie ..." dla niekończącej się listy, takiej jak Android Market

Teraz muszę wdrożyć progressbar & „Ładowanie ..” tekst jak pokazano alt text

przykładowy kod aby czerpać inspirację z byłoby świetnie.

+0

siedzę w samym każdy może help..http: //stackoverflow.com/questions/ 28122304/endless-scrolling-listview-not-working –

Odpowiedz

5

Oto rozwiązanie, które ułatwia również wyświetlanie widoku ładowania na końcu listy ListView podczas jej ładowania.

Widać klas tutaj:

https://github.com/CyberEagle/OpenProjects/blob/master/android-projects/widgets/src/main/java/br/com/cybereagle/androidwidgets/helper/ListViewWithLoadingIndicatorHelper.java - Helper, aby umożliwić korzystanie z funkcji bez rozciągający się od SimpleListViewWithLoadingIndicator.

https://github.com/CyberEagle/OpenProjects/blob/master/android-projects/widgets/src/main/java/br/com/cybereagle/androidwidgets/listener/EndlessScrollListener.java - Program nasłuchujący, który rozpoczyna ładowanie danych, gdy użytkownik zbliża się do dolnej części listy ListView.

https://github.com/CyberEagle/OpenProjects/blob/master/android-projects/widgets/src/main/java/br/com/cybereagle/androidwidgets/view/SimpleListViewWithLoadingIndicator.java - The EndlessListView. Możesz użyć tej klasy bezpośrednio lub przed nią.

+0

Czy możesz dodać przykład, jak z niego korzystać? –

+0

potrzebujesz pomocy http://stackoverflow.com/questions/28122304/endless-scrolling-listview-not-working –

1

Dodaj onScrollListener do ListView. Gdy użytkownik przewinie, sprawdź, czy ListView zbliża się do końca. Jeśli tak, pobierz więcej danych. Jako przykład:

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

aktywny:

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

można znaleźć pełną realizację at this link

Powiązane problemy