2017-06-02 12 views
0

私は、上部にカルーセルがあり、その下に画像のグリッドレイアウトがあるレイアウトを実現しようとしていました。アクティビティにはRecyclerViewがあり、そのRecyclerView(MainRV)のアイテムは別のRecyclerView(ChildRV)です。私は、MainRVの最初の子に、水平スクロール付きのLinearlayoutManagerを使用させました。 2番目の子はGridLayoutManagerを使用しています。 ChildRVは実際のアイテムをレンダリングします。ネストされたRecyclerViewの子のonScrollListenerがトリガーされていない

問題は、MainRV(グリッドビュー)の2番目の子に遅延読み込みを実装したいということです。しかし、子にonScrollListenerを追加しようとすると、トリガーされません。

を私はMainRVとChildRVの両方にsetNestedScrollingEnabledを設定してみました:私は試してみました何

。それでもonScrollListenerはトリガーされませんでした。

MainRVでonScrollListenerを実装し、スクロール状態がIDLEになった後に2番目の子を取得しようとしました。しかし、gridLayoutManagerでfindLastVisibleItemPosition()を呼び出すと、グリッドビューの一番上にあっても、最後の項目の位置が返されます。以下はonScrollListener

mRecyclerView.setOnScrollListener(new RecyclerView.OnScrollListener() { 
    @Override 
    public void onScrollStateChanged(RecyclerView recyclerView, int newState) { 
     super.onScrollStateChanged(recyclerView, newState); 
     if(newState == RecyclerView.SCROLL_STATE_IDLE) { 

      RecyclerView recyclerView1 = (RecyclerView) recyclerView.getChildAt(1); 
      GridLayoutManager gridLayoutManager = (GridLayoutManager) recyclerView1.getLayoutManager(); 

      Log.e("Scrolled activity pos", "" + gridLayoutManager.findLastVisibleItemPosition()); 
     } 
    } 

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

上記のコードの出力の抜粋である私の場合は49である最後の項目の位置を与えます。

ご意見やご提案をいただければ幸いです。

答えて

0

ここでの問題は、入れ子になったRecyclerViewのViewHolderで「静的」修飾子を削除したときに解決されました。なんらかの理由で、リスト項目をバインドするビューを再利用すると、lastVisiblItemを検索するときに誤った結果が出されていました。もし誰かが理由を説明できれば、私は本当に素晴らしいだろう。私はそれを理解できませんでした。

関連する問題