310

RecyclerView に現在表示されている要素を知る必要があります。OnScrollListener.onScroll(...)ListViewsのメソッドに相当するものはありません。で作業しようとしましView.getGlobalVisibleRect(...)たが、そのハックは醜すぎて、常に機能するとは限りません。

誰かアイデアはありますか?

4

11 に答える 11

644

最初/最後に表示される子は、LayoutManager. LinearLayoutManagerまたはを使用している場合はGridLayoutManager

int findFirstVisibleItemPosition();
int findFirstCompletelyVisibleItemPosition();
int findLastVisibleItemPosition();
int findLastCompletelyVisibleItemPosition();

例えば:

GridLayoutManager layoutManager = ((GridLayoutManager)mRecyclerView.getLayoutManager());
int firstVisiblePosition = layoutManager.findFirstVisibleItemPosition();

の場合LinearLayoutManager、最初/最後はアダプタの順序によって異なります。から子を照会しないでくださいRecyclerViewLayoutManagerキャッシングのために表示されるよりも多くのアイテムをレイアウトすることを好む場合があります。

于 2014-07-31T07:50:48.877 に答える
9

を使用recyclerView.getChildAt()して、表示されている各子を取得できconvertview.setTag(index)ます。アダプタ コードでこれらのビューにタグを設定すると、それをアダプタ データと関連付けるのに役立ちます。

于 2014-07-28T06:47:53.803 に答える
5

これを行うには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;

空かどうかを確認することを忘れないでください。

于 2016-05-17T19:57:24.290 に答える