我在RecyclerView中显示可变数量的ViewHolders,每个ViewHolders中都有一个唯一的CountDownTimer,并显示在TextView中。
如果我在RecyclerView中没有大量的ViewHolders,则CountDownTimers会如预期的那样逐秒递减。
但是,当我在RecyclerView中有大量(> 10左右)项目时,就会出现我的问题。当我使用RecyclerView打开“活动”时,我看到显示的CountDownTimers正常运行,但是当我上下滚动整个RecyclerView时,CountDownTimers开始出现故障。
我所说的故障是指波动。例如,一个CountDownTimer将显示20:15,然后跳至30:16,然后返回20:14,然后返回30:15。这很奇怪。
这就是我认为的问题所在:当我向下滚动RecyclerView时,带有CountDownTimers的ViewHolders消失了,但它们的CountDownTimers并未销毁,并且当我滚动回到那些ViewHolders时,有多个CountDownTimers被分配给了显示各自倒计时的TextViews。
我的问题是这样的:假设我所描述的确实是问题,那么当它们滚动经过时,如何在RecyclerView ViewHolders中取消CountDownTimers?
最佳答案
根据我对RecyclerView的了解:
RecyclerView会创建所需的viewHolders,并尽可能多地显示viewHolders,以便平滑滚动。当需要显示新项目时,它将检查是否存在任何未使用的viewHolder。如果存在,那么它将重用现有的,否则将创建新的。
在您的情况下,当您滚动很长时,它将尝试使用现有的viewHolder,它可能会倒计时开始。现在,当新项目绑定时,它将开始另一个计数。这就是为什么它显示故障。
因此,您可以在开始倒数之前添加检查并停止倒数。希望对您有帮助。
提前致谢。