我在 RecyclerView 中显示可变数量的 ViewHolder,每个 ViewHolder 中都有一个唯一的 CountDownTimer,显示在 TextView 中。
如果我在 RecyclerView 中没有大量的 ViewHolder,那么 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 滚动过去时取消它们?
最佳答案
根据我对 RecyclerView 的理解:
RecyclerView 创建它需要显示的 viewHolders 加上一个或多个额外的平滑滚动。当它需要显示新项目时,它会检查是否存在任何未使用的 viewHolder。如果存在,则重复使用现有的,否则创建新的。
在您滚动很长时间的情况下,它会尝试使用可能开始倒计时的现有 viewHolder。现在,当新项目绑定(bind)时,它会开始另一个倒计时。这就是它显示故障的原因。
因此,您可以在开始倒计时之前添加检查和停止倒计时。希望对您有所帮助。
提前致谢。
关于android - RecyclerView ViewHolders 中的许多 CountDownTimer 出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40500411/