RecyclerView に現在表示されている要素を知る必要があります。OnScrollListener.onScroll(...)
ListViewsのメソッドに相当するものはありません。で作業しようとしましView.getGlobalVisibleRect(...)
たが、そのハックは醜すぎて、常に機能するとは限りません。
誰かアイデアはありますか?
RecyclerView に現在表示されている要素を知る必要があります。OnScrollListener.onScroll(...)
ListViewsのメソッドに相当するものはありません。で作業しようとしましView.getGlobalVisibleRect(...)
たが、そのハックは醜すぎて、常に機能するとは限りません。
誰かアイデアはありますか?
最初/最後に表示される子は、LayoutManager
. LinearLayoutManager
またはを使用している場合はGridLayoutManager
、
int findFirstVisibleItemPosition();
int findFirstCompletelyVisibleItemPosition();
int findLastVisibleItemPosition();
int findLastCompletelyVisibleItemPosition();
例えば:
GridLayoutManager layoutManager = ((GridLayoutManager)mRecyclerView.getLayoutManager());
int firstVisiblePosition = layoutManager.findFirstVisibleItemPosition();
の場合LinearLayoutManager
、最初/最後はアダプタの順序によって異なります。から子を照会しないでくださいRecyclerView
。LayoutManager
キャッシングのために表示されるよりも多くのアイテムをレイアウトすることを好む場合があります。
を使用recyclerView.getChildAt()
して、表示されている各子を取得できconvertview.setTag(index)
ます。アダプタ コードでこれらのビューにタグを設定すると、それをアダプタ データと関連付けるのに役立ちます。
これを行うにはStaggeredGridLayoutManager
:
RecyclerView rv = findViewById(...);
StaggeredGridLayoutManager lm = new StaggeredGridLayoutManager(...);
rv.setLayoutManager(lm);
そして、目に見えるアイテム ビューを取得するには:
int[] viewsIds = lm.findFirstCompletelyVisibleItemPositions(null);
ViewHolder firstViewHolder = rvPlantios.findViewHolderForLayoutPosition(viewsIds[0]);
View itemView = viewHolder.itemView;
空かどうかを確認することを忘れないでください。