gpt4 book ai didi

android - 滚动时倒计时计时器无法正常工作?

转载 作者:行者123 更新时间:2023-11-29 00:56:37 25 4
gpt4 key购买 nike

CountDownTimer 滚动时不显示

下面是我的代码;

public void onBindViewHolder(final RecyclerView.ViewHolder viewHolder, final int position) {
{

if (holder.timer != null) {
holder.timer.cancel();
}



if (!resturantDetails.getRemainingTime().equalsIgnoreCase("") && holder.timer == null) {

Log.e("AAAAAAAAAAAAAAAAAAAAAAAAA", "" + resturantDetails.getRemainingTime());
holder.timer = new CountDownTimer(Long.parseLong(resturantDetails.getRemainingTime()), 1000) {
@Override
public void onTick(long millisUntilFinished) {

long seconds = (millisUntilFinished / 1000) % 60;
long minutes = ((millisUntilFinished / (1000 * 60)) % 60);
long hours = ((millisUntilFinished / (1000 * 60 * 60)) % 24);

holder.tvHour.setText(String.format("%02d", hours));
holder.tvMinutes.setText(String.format("%02d", minutes));
holder.tvSeconds.setText(String.format("%02d", seconds));
}

@Override

public void onFinish() {

}
}.start();
}
}

下面是我的ViewHolder类;

  public class ResturantDashboardViewHolder extends RecyclerView.ViewHolder {


CountDownTimer timer;

public ResturantDashboardViewHolder(View itemView) {
super(itemView);

}
}

最佳答案

这个问题很简单。

RecyclerView 重用 holders,每次调用 bind 更新其中的数据。

由于每次绑定(bind)任何数据时都会创建一个 CountDownTimer,因此您最终会得到多个计时器更新同一个 ViewHolder

这里最好的做法是在绑定(bind)数据(如果已启动)并重新安排到所需的持续时间之前取消它。

public void onBindViewHolder(final RecyclerView.ViewHolder holder, final int position) {
...
if (holder.timer != null) {
holder.timer.cancel();
}
holder.timer = new CountDownTimer(expiryTime, 500) {
...
}.start();
}

public static class ResturantDashboardViewHolder extends RecyclerView.ViewHolder {
...
CountDownTimer timer;

public FeedViewHolder(View itemView) {
...
}
}

这样您将在启动另一个计时器之前取消该 ViewHolder 的任何当前计时器实例。

关于android - 滚动时倒计时计时器无法正常工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54229360/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com