Android 倒数计时器 - 遍历 ArrayList 并使用列表值重新启动计时器
Android Countdown Timer - Loop through ArrayList restarting timer with List Value
我有一个整数 ArrayList 'timerList'(例如 - 10、20、10)的值,然后我想将其用于倒数计时器。
我希望遍历列表并在完成后重新启动计时器,以便它使用列表中的下一个值,因此它从 10 开始倒计时,然后重置为 20,然后重置为 10,直到所有已使用列表中的值。
我遇到的问题是遍历 ArrayList 的值。我可以从 ArrayList 设置初始值,然后尝试使用 onFinish() 中的数组列表来设置下一次。
我已经尝试创建一个 int 变量来跟踪我在列表中的位置,然后每次都将其加 1 以获得下一个列表值,但是一旦它倒计时一次,它就会坚持下去在 0
任何关于我如何正确实施它的建议或示例(如果我没有朝着正确的方向前进,甚至可能从不同的角度看待它)将不胜感激!
提前致谢
保罗
我通过创建倒数计时器数组解决了这个问题
public class MainActivity extends AppCompatActivity {
CountDownTimer[] countDownTimers;
int Time;
TextView text;
ArrayList<Integer> timeList;
int i=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
text= (TextView) findViewById(R.id.text);
timeList=new ArrayList<>();
timeList.add(10*1000);
timeList.add(20*1000);
timeList.add(30*1000);
countDownTimers=new CountDownTimer[timeList.size()];
for(int i=0;i<timeList.size();i++){
final int finalI = i;
countDownTimers[i]=new CountDownTimer(timeList.get(finalI),100) {
@Override
public void onTick(long millisUntilFinished) {
long ms = millisUntilFinished;
String texts = String.format("%02d : %02d",
TimeUnit.MILLISECONDS.toMinutes(ms) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(ms)),
TimeUnit.MILLISECONDS.toSeconds(ms) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(ms)));
text.setText(texts);
}
@Override
public void onFinish() {
if(!((finalI +1)>=timeList.size())){
countDownTimers[finalI+1].start();
}
}
};
}
countDownTimers[0].start();
}
}
我有一个整数 ArrayList 'timerList'(例如 - 10、20、10)的值,然后我想将其用于倒数计时器。
我希望遍历列表并在完成后重新启动计时器,以便它使用列表中的下一个值,因此它从 10 开始倒计时,然后重置为 20,然后重置为 10,直到所有已使用列表中的值。
我遇到的问题是遍历 ArrayList 的值。我可以从 ArrayList 设置初始值,然后尝试使用 onFinish() 中的数组列表来设置下一次。
我已经尝试创建一个 int 变量来跟踪我在列表中的位置,然后每次都将其加 1 以获得下一个列表值,但是一旦它倒计时一次,它就会坚持下去在 0
任何关于我如何正确实施它的建议或示例(如果我没有朝着正确的方向前进,甚至可能从不同的角度看待它)将不胜感激!
提前致谢 保罗
我通过创建倒数计时器数组解决了这个问题
public class MainActivity extends AppCompatActivity {
CountDownTimer[] countDownTimers;
int Time;
TextView text;
ArrayList<Integer> timeList;
int i=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
text= (TextView) findViewById(R.id.text);
timeList=new ArrayList<>();
timeList.add(10*1000);
timeList.add(20*1000);
timeList.add(30*1000);
countDownTimers=new CountDownTimer[timeList.size()];
for(int i=0;i<timeList.size();i++){
final int finalI = i;
countDownTimers[i]=new CountDownTimer(timeList.get(finalI),100) {
@Override
public void onTick(long millisUntilFinished) {
long ms = millisUntilFinished;
String texts = String.format("%02d : %02d",
TimeUnit.MILLISECONDS.toMinutes(ms) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(ms)),
TimeUnit.MILLISECONDS.toSeconds(ms) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(ms)));
text.setText(texts);
}
@Override
public void onFinish() {
if(!((finalI +1)>=timeList.size())){
countDownTimers[finalI+1].start();
}
}
};
}
countDownTimers[0].start();
}
}