RecyclerView - 当视图不再可见时回调
RecyclerView - callback when view is no longer visible
我有一个带有 Adapter 和 LayoutManager 的 RecyclerView。 Adapter 有大约 15 个不同的 ViewHolder。其中之一包含加载外部内容的 WebView(其中 99% 是 YouTube 以外的视频)。
当 Adapter 的任何 View 离开屏幕时就会出现问题 - WebView 中的视频继续播放并且声音正在播放。不过,这对我来说是可以接受的。
当我搬到另一个Activity时,关键问题就开始了。视频的声音还在。
当 RecyclerView 的任何子视图更改可见性状态(意味着从显示中消失)时,有什么方法可以通知我吗?
您可以使用以下一种方法:
您可以使用 layoutManager.findFirstVisibleItemPosition();
和 layoutManager.findLastVisibleItemPosition();
获取屏幕上可见的第一个和最后一个位置。如果您的项目不在这些值之间,则它不在屏幕上。
让我知道这是否是您正在寻找的,或者您是否need/want出于某种原因使用其他方法。
我要回复我自己。最好的方法是将 RecyclerView.OnChildAttachStateChangeListener
添加到我的 RecyclerView,然后在调用 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();
}
}
});
最简单的方法可能是使用 RecyclerListener
- 请参阅可用文档:https://developer.android.com/reference/android/support/v7/widget/RecyclerView.RecyclerListener.html
回调得到 onViewRecycled(RecyclerView.ViewHolder holder)
,因此您可以轻松判断回收了哪些视图。
我有一个带有 Adapter 和 LayoutManager 的 RecyclerView。 Adapter 有大约 15 个不同的 ViewHolder。其中之一包含加载外部内容的 WebView(其中 99% 是 YouTube 以外的视频)。 当 Adapter 的任何 View 离开屏幕时就会出现问题 - WebView 中的视频继续播放并且声音正在播放。不过,这对我来说是可以接受的。
当我搬到另一个Activity时,关键问题就开始了。视频的声音还在。
当 RecyclerView 的任何子视图更改可见性状态(意味着从显示中消失)时,有什么方法可以通知我吗?
您可以使用以下一种方法:
您可以使用 layoutManager.findFirstVisibleItemPosition();
和 layoutManager.findLastVisibleItemPosition();
获取屏幕上可见的第一个和最后一个位置。如果您的项目不在这些值之间,则它不在屏幕上。
让我知道这是否是您正在寻找的,或者您是否need/want出于某种原因使用其他方法。
我要回复我自己。最好的方法是将 RecyclerView.OnChildAttachStateChangeListener
添加到我的 RecyclerView,然后在调用 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();
}
}
});
最简单的方法可能是使用 RecyclerListener
- 请参阅可用文档:https://developer.android.com/reference/android/support/v7/widget/RecyclerView.RecyclerListener.html
回调得到 onViewRecycled(RecyclerView.ViewHolder holder)
,因此您可以轻松判断回收了哪些视图。