在RecyclerView.OnScrollListener中设置视图可见性时的性能



我有一个RecyclerView,希望在用户滚动时设置文本并更改TextView的可见性。View应该在用户停止滚动后显示一秒钟,然后取消显示。为此,我有一个RecyclerView.OnScrollListener。我的代码看起来像这样:

var scrollJob = Job()
var tempText = ""
recyclerView.addOnScrollListener(object : RecyclerView.OnScrollListener() {
override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
super.onScrolled(recyclerView, dx, dy)
if (dx != 0 || dy != 0) {
val someText = // compute text from ViewHolder
scrollTextView.visibility = View.VISIBLE
if (someText != tempText) {
scrollTextView.text = someText
tempText = someText
}
}
}
override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) {
super.onScrollStateChanged(recyclerView, newState)
when (newState) {
RecyclerView.SCROLL_STATE_SETTLING -> Log.d("TAG", "state: settling")
RecyclerView.SCROLL_STATE_IDLE -> {
scrollJob.cancel()
scrollJob = lifecycleScope.launch {
delay(1000)
scrollTextView.visibility = View.GONE
}
}
RecyclerView.SCROLL_STATE_DRAGGING -> scrollJob.cancel()
}
}
}

代码运行得很好,我只是想知道我是否不应该在onScrolled中做那么多事情,因为旧手机可能会有这个问题。SCROLL_STATE_DRAGGING的问题在于,即使不需要它,也会调用它。

你需要获得scrollTextView的可见性,如果INVISIBLE或GONE,你会使其可见。你不需要让它可见,如果已经可见。。。

if (scrollTextView.getVisibility() != View.VISIBLE)
scrollTextView.visibility = View.VISIBLE

在任何情况下都要做到这一点,这将影响你的表现!

最新更新