私はRecyclerViewにビデオプレビューを表示しています。 ユーザーがスクロールしているとき、ビデオは、ユーザーが見ることができるrecyclerViewアイテム(スクロール状態がIDLEの場合)で自動的に再生されます。RecyclerViewのViewをAdapterPositionで取得
私は、ユーザーに表示される位置をメソッドstartVideosOn(int[] positions)
の配列として渡すカスタムonScrollListenerを作成しました。
しかし、問題は、ビューを位置(アダプタの位置と同じ位置)で取得したいときです。試してみると、RecyclerViewにはリサイクルされる子が2つしかないので、3番目のアイテムが表示されたらnull
と表示されます。
したがって、RecyclerViewのView
をアダプタの位置で取得するにはどうすればよいですか?
編集、これはOnScrollListenerです:
public abstract class AutoPlayRecyclerOnScrollListener extends RecyclerView.OnScrollListener {
LinearLayoutManager linearLayoutManager;
public AutoPlayRecyclerOnScrollListener(LinearLayoutManager linearLayoutManager) {
this.linearLayoutManager = linearLayoutManager;
}
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
if (newState == AbsListView.OnScrollListener.SCROLL_STATE_IDLE) {
int firstVisibleItemPosition = linearLayoutManager.findFirstVisibleItemPosition();
int lastVisibleItemPosition = linearLayoutManager.findLastVisibleItemPosition();
if (firstVisibleItemPosition != -1 && lastVisibleItemPosition != -1) {
playOn(firstVisibleItemPosition, lastVisibleItemPosition);
}
}
}
private void playOn(int lower, int upper) {
int[] completelyVisibleItems = new int[upper - lower + 1];
for (int i = lower, j = 0; i <= upper; i++, j++) {
completelyVisibleItems[j] = i;
}
playOn(completelyVisibleItems);
}
public abstract void playOn(int[] items);
}
スクロールリスナーコード – pskink
は、「RecyclerView#findViewHolderForAdapterPosition(int position)」または「RecyclerView#findViewHolderForLayoutPosition(int position)」を試行しましたか? – pskink
@pskinkこれを回答として投稿できますか?それを受け入れることができますか? – PatrickMA