android - RecyclerView ViewHolders 中的许多 CountDownTimer 出错

标签 android android-recyclerview countdowntimer android-viewholder

我在 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/

相关文章:

android - "Waiting for target device to come online"Mac 安卓工作室

android - 带选项卡的抽屉导航和工具栏

java - 如何在Android上防止键盘推送webview

android - 删除回收器 View 行之间的空间间隙

android - 在 ListView 中添加倒数计时器会在每个新行中重新启动

java - 更改 Android 应用的样式和主题中的文本外观

android - 在 fragment 内滚动时出现 RecyclerView 错误

java - RecyclerView - 获取选定的位置并将该位置传递给另一个 Activity ,其中将出现与选定的特定项目相同的列表

android - 在 CountdownTimer 上获取剩余时间并将剩余时间用作分数 android

android - onFinish() CountDownTimer 方法太长?