gpt4 book ai didi

java - 如何在 recyclerview 元素中设置固定的 CountDownTimer?

转载 作者:行者123 更新时间:2023-11-30 04:56:57 26 4
gpt4 key购买 nike

我有以下回收 View :

enter image description here

当我按下“开始”按钮时,CountDownTimer 开始倒计时,但问题是,如果我在问题示例 1(或任何其他问题元素)上开始倒计时,但如果我向下滚动到 recyclerview 的底部,计时器重置。

第二个问题是,当我从这个 fragment 切换到另一个 fragment 时(例如:使用反压返回到前一个 fragment ),计时器会重置。

我不知道,如何解决这个问题,请帮助我。

我的 recyclerview 适配器如下:


import android.content.Context;
import android.os.CountDownTimer;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import java.text.MessageFormat;
import java.util.ArrayList;

public class QuestionsAdapter extends RecyclerView.Adapter<QuestionsAdapter.QuestionsViewHolder>
{
Context context;
ArrayList<Question> questions;

public static class QuestionsViewHolder extends RecyclerView.ViewHolder
{
public TextView questionname;
public TextView status;
public TextView timereamining;
public Button start;

public QuestionsViewHolder(View v)
{
super(v);

questionname=v.findViewById(R.id.questiontext);
status=v.findViewById(R.id.statusstr);
timereamining=v.findViewById(R.id.time);
start=v.findViewById(R.id.startbutton);
}
}

public QuestionsAdapter(Context context,ArrayList<Question> dataset)
{
this.context=context;
this.questions=dataset;
}

@NonNull
@Override
public QuestionsViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType)
{
View v= LayoutInflater.from(parent.getContext()).inflate(R.layout.listofquestions,parent,false);

return new QuestionsViewHolder(v);
}

@Override
public void onBindViewHolder(@NonNull final QuestionsViewHolder holder, final int position)
{
holder.questionname.setText(questions.get(position).getQuestionname());
holder.status.setText(questions.get(position).getStatus());
holder.timereamining.setText(String.valueOf(questions.get(position).getTimelimit())+":00");

holder.start.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
new CountDownTimer(questions.get(position).getTimelimit()*60000, 1000)
{
public void onTick(long millisUntilFinished)
{
long minutes=millisUntilFinished/60000;
long seconds=millisUntilFinished%60000/1000;

String timeleft;

timeleft=""+minutes;
timeleft+=":";
if(seconds<10)
{
timeleft+="0";
}

timeleft+=seconds;
holder.timereamining.setText(timeleft);

}

public void onFinish()
{
holder.timereamining.setText("done!");
}

}.start();
}
});
}

@Override
public int getItemCount()
{
return questions.size();
}
}

最佳答案

您遇到的问题是由于 RecyclerView 的固有性质造成的。这是一个很好的资源,可以解释正在发生的事情:Understanding RecyclerView .

RecyclerView 回收你的项目行时,你将失去你在该行中持有的任何状态。一些想法可能会帮助您完成您所追求的目标,即在您的项目行之外唯一地启动每个计数器并在您的适配器内维护一个关系,因此当您滚动回到该项目位置时,该行可以重新连接到它的计数器。您也可以使用 ListView ,因为它不会(总是)回收您的行,但考虑到这一点后我不会推荐它。 List View Recycling

关于java - 如何在 recyclerview 元素中设置固定的 CountDownTimer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58962921/

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