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