私は、上部にカルーセルがあり、その下に画像のグリッドレイアウトがあるレイアウトを実現しようとしていました。アクティビティには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である最後の項目の位置を与えます。
ご意見やご提案をいただければ幸いです。