web-dev-qa-db-ja.com

RecyclerView-ビューが表示されなくなったときのコールバック

アダプタとLayoutManagerを備えたRecyclerViewがあります。アダプタには約15種類のViewHolderがあります。それらの1つには、外部コンテンツをロードするWebViewが含まれています(それらの99%はYouTube外のビデオです)。アダプタのビューが画面から出ると問題が発生します。WebViewのビデオが再生し続け、サウンドが再生されます。それでも、それは私にとって受け入れられます。

別のアクティビティに移動すると、重要な問題が始まります。ビデオの音声はまだ存在しています。

その子ビューのいずれかが表示状態を変更したとき(表示から消えることを意味する)、RecyclerViewが私に通知する方法はありますか?

27
mroczis

自分に返信します。最善のアプローチは、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();

            }
        }
    });
_
36
mroczis

使用できる方法の1つは次のとおりです。

layoutManager.findFirstVisibleItemPosition();およびlayoutManager.findLastVisibleItemPosition();を使用して、画面に表示される最初と最後の位置を取得できます。アイテムがこれらの値の間に収まらない場合、画面外にあります。

これがあなたが探しているものであるか、何らかの理由で別のアプローチを使用する必要があるかどうかを教えてください。

3
ryguy

これを行う最も簡単な方法は、おそらくRecyclerListenerを使用することです-利用可能なドキュメントを参照してください: https://developer.Android.com/reference/Android/support/v7/widget/RecyclerView.RecyclerListener。 html

コールバックはonViewRecycled(RecyclerView.ViewHolder holder)を取得するため、どのビューがリサイクルされるかを簡単に確認できます。

1
AllDayAmazing