-2

私はrecyclerviewで無限のスクロールを実装しようとしています。しかし、コンテンツのサイズが画面の高さよりも小さい場合、onScrolledは呼び出されません。私はスクロールダウン時にもっと読み込みたいですが、onScrolledが呼び出されずにdy値を取得できないため、スクロールダウンジェスチャを検出できません。私は不思議に思っていた:コンテンツが画面の高さよりも小さい場合、無限スクロールrecyclerview onScrolledがトリガーされない

1)この場合、スクロール方向を取得する方法 2)このような状況の場合のベストプラクティスは何ですか?サービスコールごとに設定された数のアイテムが取得されています。返されたアイテムの数が画面に表示されない場合はどうなりますか?

recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() 
     { 
      int lastVisibleItemPosition, visibleItemCount, totalItemCount; 

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

       if(dy>0) 
       { 
        visibleItemCount = recyclerLayoutManager.getChildCount(); 
        totalItemCount = recyclerLayoutManager.getItemCount(); 
        lastVisibleItemPosition = recyclerLayoutManager.findLastVisibleItemPosition(); 


        if (lastVisibleItemPosition >= totalItemCount) 
        { 

         if (!loading && dy>0 && moreToload) 
         { 
          loadMore(); 
         }      
        } 
       } 

      } 
}); 

ありがとうございます!あなたが試すことができ

+0

ListViewに他のアイテムを読み込んで、コンテンツのサイズが画面の高さを超えるようにしてください – GuilhermeFGL

答えて

0

同じですが、RecyclerView.LayoutManagerカスタマイズとし、取り扱いオーバースクロール

@Override 
public int scrollVerticallyBy (int dx, RecyclerView.Recycler recycler, 
RecyclerView.State state) { 
    int scrollRange = super.scrollVerticallyBy(dx, recycler, state); 
    int overscroll = dx - scrollRange; 
    if (overscroll > 0) { 
    // bottom overscroll 
    } else if (overscroll < 0) { 
    // top overscroll 
    } 
    return scrollRange; 
} 
0

onScrolledコールバックもレイアウト計算後に表示されるアイテムの範囲が変化した場合に呼び出されます。リンクhereを確認してください。

これは、アイテムサーバが任意の項目を返さない場合は、recyclerViewが更新されません

@Override 
public void onScrolled(RecyclerView recyclerView, int dx, int dy) { 
    super.onScrolled(recyclerView, dx, dy); 
    visibleItemCount = recyclerLayoutManager.getChildCount(); 
    totalItemCount = recyclerLayoutManager.getItemCount(); 
    lastVisibleItemPosition = recyclerLayoutManager.findLastVisibleItemPosition(); 

    if ((totalItemCount == visibleItemCount) || //This mean you still have space in your screen 
     (dy > 0 && !loading && lastVisibleItemPosition >= totalItemCount)) { 
     // Call load more here 
    } 
} 

リサイクルビューにして、デフォルトonScroll方法でそのいつもと呼ばれるかつての後に終了した負荷を意味するがするまで再び呼び出されません。あなたはrecyclerViewの終わりに達します。

関連する問題