2016-10-19 7 views
0

次のコードを使用して、無限スクロールを実装します。問題はonScroll()メソッドが継続的に呼び出しを続け、データのロードが無限ループに陥ることです。私はここで何が欠けているのですか?android:EndlessRecyclerOnScrollListenerによってループが発生する

public abstract class EndlessRecyclerOnScrollListener extends RecyclerView.OnScrollListener { 

    public int previousTotal = 0; // The total number of items in the dataSet after the last load 
    public boolean loading = true; // True if we are still waiting for the last set of data to load. 
    public int visibleThreshold = 0; // The minimum amount of items to have below your current scroll position before loading more. 
    int firstVisibleItem, visibleItemCount, totalItemCount; 
    public int current_page = 1; 
    private LinearLayoutManager mLinearLayoutManager; 


    public EndlessRecyclerOnScrollListener(LinearLayoutManager linearLayoutManager) { 
     this.mLinearLayoutManager = linearLayoutManager; 
    } 

    @Override 
    public void onScrolled(RecyclerView recyclerView, int dx, int dy) { 
     super.onScrolled(recyclerView, dx, dy); 

     visibleItemCount = recyclerView.getChildCount(); 
     totalItemCount = mLinearLayoutManager.getItemCount(); 
     firstVisibleItem = mLinearLayoutManager.findFirstVisibleItemPosition(); 

     if (loading) { 
      if (totalItemCount > previousTotal) { 
       loading = false; 
       previousTotal = totalItemCount; 
      } 
     } 
     if (!loading && (totalItemCount - visibleItemCount) <= (firstVisibleItem + visibleThreshold)) { 

      current_page++; 
      onLoadMore(current_page); 
      loading = true; 
     } 
    } 
    public abstract void onLoadMore(int current_page); 

    @Override 
    public void onScrollStateChanged(RecyclerView recyclerView, int newState) { 
     super.onScrollStateChanged(recyclerView, newState); 
    } 
} 

と私の活動で:

endlessRecyclerOnScrollListener = new EndlessRecyclerOnScrollListener(mLayoutManager) { 
      @Override 
      public void onLoadMore(int current_page) { 
        loadData() 

      } 
     }; 
     mRecyclerView.addOnScrollListener(endlessRecyclerOnScrollListener); 
+0

これを試してください:https://codentrick.com/load-more-recyclerview-bottom-progressbar/ – compte14031879

答えて

0

これは私が無限スクロールをしたかであり、それは私のために完璧に動作します。ありがとう...

private boolean loading = true; 
int pastVisiblesItems, visibleItemCount, totalItemCount; 
LinearLayoutManager mLayoutManager; 


mLayoutManager = new LinearLayoutManager(this); 
mRecyclerView.setLayoutManager(mLayoutManager); 
mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() 
{ 
    @Override 
    public void onScrolled(RecyclerView recyclerView, int dx, int dy) 
    { 
     if(dy > 0) //check for scroll down 
     { 
      visibleItemCount = mLayoutManager.getChildCount(); 
      totalItemCount = mLayoutManager.getItemCount(); 
      pastVisiblesItems = mLayoutManager.findFirstVisibleItemPosition(); 

      if (loading) 
      { 
       if ((visibleItemCount + pastVisiblesItems) >= totalItemCount) 
       { 
        loading = false; 
        Log.v("...", "We reach Last Item!"); 

        // fetch new data here or whatever you want. 
        DoPagination(); 

       } 
      } 
     } 
    } 
}); 
関連する問題