Android倒计时计时器 - 使用列表值循环通过ArrayList重新启动计时器

时间:2016-08-18 08:00:28

标签: java android arraylist timer countdowntimer

我有一个整数ArrayList'timerList'(例如 - 10,20,10)的值,然后我想用它来倒数计时器。

我希望遍历列表并在完成后重新启动计时器,以便它使用列表中的下一个值,因此它从10开始倒计时,然后重置为20,然后重置为10,直到所有值都在该清单已被使用。

我正在努力的部分是循环遍历ArrayList的值。我可以从ArrayList设置初始值,然后我尝试使用onFinish()中的数组列表来设置下一次。

我已经尝试创建一个int变量来跟踪我在列表中的位置,然后每次都添加1,以获得下一个列表值但是一旦它倒计时一次,它只是坚持0

任何有关我如何正确实现这一点的建议或示例(如果我没有朝着正确的方向前进,甚至可以从不同的角度看待它)将不胜感激!

提前致谢 保罗

1 个答案:

答案 0 :(得分:2)

我通过创建倒数计时器数组来解决这个问题

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();

    }

}