我想知道屏幕上的可见项目,以便如果该项目的 exoplayer 正在运行,我可以停止它。在这里,我尝试了很多方法来停止已经运行的 exoplayer,但我没有找到任何合适的解决方案。谁能告诉我如何实现这一目标。
使用所有这四种方法并没有给我可见的 recyclerview 项目。顾名思义,它只给我最后一项和屏幕上可见的第一项
rvTips.addOnScrollListener(object : RecyclerView.OnScrollListener() {
override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
super.onScrolled(recyclerView, dx, dy)
if (dy > 0) {
// Scrolling up
} else {
// Scrolling down
}
}
override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) {
super.onScrollStateChanged(recyclerView, newState)
// First Method Tried
firstVisiblePosition = layoutManager.findFirstVisibleItemPosition()
lastVisiblePosition = layoutManager.findLastVisibleItemPosition()
firstCompletelyVisiblePosition = layoutManager.findFirstCompletelyVisibleItemPosition()
lastCompletelyVisiblePosition = layoutManager.findLastCompletelyVisibleItemPosition()
for (i in 0 until tipList.size) {
if (i != firstVisiblePosition
&& i != lastVisiblePosition
&& i != firstCompletelyVisiblePosition
&& i != lastCompletelyVisiblePosition
&& tipList[i].exoplayer != null
) {
tipList[i].exoplayer!!.playWhenReady = false
tipList[i].exoplayer!!.stop()
tipList[i].exoplayer!!.seekTo(0)
}}
if (newState == AbsListView.OnScrollListener.SCROLL_STATE_FLING) {
}
// Second Method Tried
if (newState == AbsListView.OnScrollListener.SCROLL_STATE_IDLE) {
firstVisiblePosition = layoutManager.findFirstVisibleItemPosition()
lastVisiblePosition = layoutManager.findLastVisibleItemPosition()
firstCompletelyVisiblePosition = layoutManager.findFirstCompletelyVisibleItemPosition()
lastCompletelyVisiblePosition = layoutManager.findLastCompletelyVisibleItemPosition()
for (i in 0 until tipList.size) {
if ((i < firstVisiblePosition || i > lastVisiblePosition)
&& tipList[i].exoplayer != null
) {
tipList[i].exoplayer!!.playWhenReady = false
tipList[i].exoplayer!!.stop()
tipList[i].exoplayer!!.seekTo(0)
}}
}
}
})