2013-07-04 17 views
5

私のsetOnScrollListenerに問題があります。私がリストビューの一番下にスクロールするたびに、asynctaskを呼び出すだけです。 setOnScrollListenerを一度ロードするように設定するにはどうすればいいですか?Android ListView setOnScrollListener

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 { 

        } 

       } 
      }); 

答えて

9

OnScroll方法は、あなたがリストビューをスクロールダウンしたときに呼び出されるので、あなたがするための最善の策は、1つの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 - よりロードする前に、あなたの現在のスクロール位置の下に持っているアイテムの最小量。

currentPageに - あなたは

previousTotalをロードしたデータの現在のページ - データセット内の項目の合計数最後のロード後に

ロード - 真の我々はまだ待っている場合ロードする最後のデータセット。

+0

これは機能しています。おかげで仲間 –

+0

いつでも仲間を助けるだけで、仲間:-P。 –

+0

@mushtaqあなたは 'LoadGigsTask()'クラスでどのようなコードを書くべきか教えてください。 webservice( 'json 'のような)で' currentPage'を使ってより多くの投稿を検索し、listviewを更新する方法 –