2013-07-04 10 views
5

Mam problem z moim setOnScrollListener. Po prostu przewijam mój asynktask za każdym razem, gdy przewijam do dołu listy. Jak ustawić setOnScrollListener do załadowania tylko po osiągnięciu dna.Zestaw Android ListViewOnScrollListener

listview.setAdapter(adapter); 
      mProgressDialog.dismiss(); 

      listview.setOnScrollListener(new OnScrollListener() { 

       @Override 
       public void onScrollStateChanged(AbsListView view, 
         int scrollState) { // TODO Auto-generated method stub 

       } 

       @Override 
       public void onScroll(AbsListView view, int firstVisibleItem, 
         int visibleItemCount, int totalItemCount) { 
        int lastInScreen = firstVisibleItem + visibleItemCount; 
        if (lastInScreen == totalItemCount) { 

         new loadmore().execute(); 

        } else { 

        } 

       } 
      }); 

Odpowiedz

9

metoda OnScroll nazywa kiedy tylko przewijać widok listy, więc najlepszym wyborem dla ciebie jest użycie pewnego rodzaju dopełnienie, jak ten, realizowany here.

public class EndlessScrollListener implements OnScrollListener 

    private int visibleThreshold = 5; 
    private int currentPage = 0; 
    private int previousTotal = 0; 
    private boolean loading = true; 

    public EndlessScrollListener() { 
    } 
    public EndlessScrollListener(int visibleThreshold) { 
     this.visibleThreshold = visibleThreshold; 
    } 

    @Override 
    public void onScroll(AbsListView view, int firstVisibleItem, 
      int visibleItemCount, int totalItemCount) { 
     if (loading) { 
      if (totalItemCount > previousTotal) { 
       loading = false; 
       previousTotal = totalItemCount; 
       currentPage++; 
      } 
     } 
     if (!loading && (totalItemCount - visibleItemCount) <= (firstVisibleItem + visibleThreshold)) { 
      // I load the next page of gigs using a background task, 
      // but you can call any function here. 
      new LoadGigsTask().execute(currentPage + 1); 
      loading = true; 
     } 
    } 

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

visibleThreshold - Minimalna ilość elementów, które mają poniżej aktualnej pozycji przewijania, przed załadowaniem więcej.

currentPage - Aktualna strona z danymi został załadowany

previousTotal - Łączna liczba elementów w zbiorze danych po ostatnim obciążeniu

loading - True jeśli wciąż czekamy dla ostatniego zestawu danych do załadowania.

+0

Gotowy do pracy. dzięki bro –

+0

W każdej chwili brat, pomagając bratu :-P. –

+0

@mushtaq możesz mi powiedzieć, co powinniśmy kodować w 'klasie LoadGigsTask()' mam na myśli logikę stojącą za tym. i jak używać 'currentPage' w webservice (jak json), aby pobrać więcej postów i aktualizować listing list. –

Powiązane problemy