アダプタとLayoutManagerを備えたRecyclerViewがあります。アダプタには約15種類のViewHolderがあります。それらの1つには、外部コンテンツをロードするWebViewが含まれています(それらの99%はYouTube外のビデオです)。アダプタのビューが画面から出ると問題が発生します。WebViewのビデオが再生し続け、サウンドが再生されます。それでも、それは私にとって受け入れられます。
別のアクティビティに移動すると、重要な問題が始まります。ビデオの音声はまだ存在しています。
その子ビューのいずれかが表示状態を変更したとき(表示から消えることを意味する)、RecyclerViewが私に通知する方法はありますか?
自分に返信します。最善のアプローチは、RecyclerViewに_RecyclerView.OnChildAttachStateChangeListener
_を追加し、onChildViewDetachedFromWindow(View view)
が呼び出されたときにWebViewでイベントを処理することです。
例:
_mRecyclerView.addOnChildAttachStateChangeListener(new RecyclerView.OnChildAttachStateChangeListener() {
@Override
public void onChildViewAttachedToWindow(View view) {
WebView webView = (WebView) view.findViewById(R.id.webview);
if (webView != null) {
webView.onResume();
}
}
@Override
public void onChildViewDetachedFromWindow(View view) {
WebView webView = (WebView) view.findViewById(R.id.webview);
if (webView != null) {
webView.onPause();
}
}
});
_
使用できる方法の1つは次のとおりです。
layoutManager.findFirstVisibleItemPosition();
およびlayoutManager.findLastVisibleItemPosition();
を使用して、画面に表示される最初と最後の位置を取得できます。アイテムがこれらの値の間に収まらない場合、画面外にあります。
これがあなたが探しているものであるか、何らかの理由で別のアプローチを使用する必要があるかどうかを教えてください。
これを行う最も簡単な方法は、おそらくRecyclerListener
を使用することです-利用可能なドキュメントを参照してください: https://developer.Android.com/reference/Android/support/v7/widget/RecyclerView.RecyclerListener。 html
コールバックはonViewRecycled(RecyclerView.ViewHolder holder)
を取得するため、どのビューがリサイクルされるかを簡単に確認できます。