首页 > 解决方案 > 在一项活动中使用多个计时器

问题描述

我试图在一项活动中使用多个计时器,但每个计时器的行为都不像预期的那样。

我希望我能够同时启动每个计时器,并且我已经为每个不同的变量声明了不同的函数。

活动截图

活动截图

代码

 timeWhenStoppedSetup = 0;
    timeWhenStoppedProcessing = 0;
    timeWhenStoppedReconciliation = 0;
    timeWhenStoppedCleaning = 0;

    chronometerSetUp.setOnChronometerTickListener(new Chronometer.OnChronometerTickListener() {
        @Override
        public void onChronometerTick(Chronometer chronometerChanged) {
            chronometerSetUp = chronometerChanged;
            long time = SystemClock.elapsedRealtime() - chronometerSetUp.getBase();
            int h   = (int)(time /3600000);
            int m = (int)(time - h*3600000)/60000;
            int s= (int)(time - h*3600000- m*60000)/1000 ;
            String t = (h < 10 ? "0"+h: h)+":"+(m < 10 ? "0"+m: m)+":"+ (s < 10 ? "0"+s: s);
            chronometerSetUp.setText(t);
        }
    });

    startSetUp.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            startStopChronometerSetUp(startSetUp);
        }
    });

    chronometerProcessing.setOnChronometerTickListener(new Chronometer.OnChronometerTickListener() {
        @Override
        public void onChronometerTick(Chronometer chronometerChanged) {
            chronometerProcessing = chronometerChanged;
            long time = SystemClock.elapsedRealtime() - chronometerProcessing.getBase();
            int h   = (int)(time /3600000);
            int m = (int)(time - h*3600000)/60000;
            int s= (int)(time - h*3600000- m*60000)/1000 ;
            String t = (h < 10 ? "0"+h: h)+":"+(m < 10 ? "0"+m: m)+":"+ (s < 10 ? "0"+s: s);
            chronometerProcessing.setText(t);
        }
    });

    startProcessing.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            startStopChronometerProcessing(startProcessing);
        }
    });

    chronometerReconciliation.setOnChronometerTickListener(new Chronometer.OnChronometerTickListener() {
        @Override
        public void onChronometerTick(Chronometer chronometerChanged) {
            chronometerReconciliation = chronometerChanged;
            long time = SystemClock.elapsedRealtime() - chronometerReconciliation.getBase();
            int h   = (int)(time /3600000);
            int m = (int)(time - h*3600000)/60000;
            int s= (int)(time - h*3600000- m*60000)/1000 ;
            String t = (h < 10 ? "0"+h: h)+":"+(m < 10 ? "0"+m: m)+":"+ (s < 10 ? "0"+s: s);
            chronometerReconciliation.setText(t);
        }
    });

    startReconciliation.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            startStopChronometerReconciliation(startReconciliation);
        }
    });

    chronometerCleaning.setOnChronometerTickListener(new Chronometer.OnChronometerTickListener() {
        @Override
        public void onChronometerTick(Chronometer chronometerChanged) {
            chronometerCleaning = chronometerChanged;
            long time = SystemClock.elapsedRealtime() - chronometerCleaning.getBase();
            int h   = (int)(time /3600000);
            int m = (int)(time - h*3600000)/60000;
            int s= (int)(time - h*3600000- m*60000)/1000 ;
            String t = (h < 10 ? "0"+h: h)+":"+(m < 10 ? "0"+m: m)+":"+ (s < 10 ? "0"+s: s);
            chronometerCleaning.setText(t);
        }
    });

    startCleaning.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            startStopChronometerCleaning(startCleaning);
        }
    });
}
public void startStopChronometerSetUp(View view){
    if(isStart){
        chronometerSetUp.stop();
        timeWhenStoppedSetup = chronometerSetUp.getBase() - SystemClock.elapsedRealtime();
        isStart = false;
    }else{
        chronometerSetUp.setBase(SystemClock.elapsedRealtime() + timeWhenStoppedSetup);
        chronometerSetUp.start();
        isStart = true;
        ((Button)view).setBackgroundResource(stop);
    }
}

public void startStopChronometerProcessing(View view){
    if(isStart){
        chronometerProcessing.stop();
        timeWhenStoppedProcessing = chronometerProcessing.getBase() - SystemClock.elapsedRealtime();
        isStart = false;
    }else{
        chronometerProcessing.setBase(SystemClock.elapsedRealtime() + timeWhenStoppedProcessing);
        chronometerProcessing.start();
        isStart = true;
        ((Button)view).setBackgroundResource(stop);
    }
}

public void startStopChronometerReconciliation(View view){
    if(isStart){
        chronometerReconciliation.stop();
        timeWhenStoppedReconciliation = chronometerReconciliation.getBase() - SystemClock.elapsedRealtime();
        isStart = false;
    }else{
        chronometerReconciliation.setBase(SystemClock.elapsedRealtime() + timeWhenStoppedReconciliation);
        chronometerReconciliation.start();
        isStart = true;
        ((Button)view).setBackgroundResource(stop);
    }
}

public void startStopChronometerCleaning(View view){
    if(isStart){
        chronometerCleaning.stop();
        timeWhenStoppedCleaning = chronometerCleaning.getBase() - SystemClock.elapsedRealtime();
        isStart = false;
    }else{
        chronometerCleaning.setBase(SystemClock.elapsedRealtime() + timeWhenStoppedCleaning);
        chronometerCleaning.start();
        isStart = true;
        ((Button)view).setBackgroundResource(stop);
    }
}

我在这里做错了什么,或者这甚至可能吗?

描述它,其他天文钟的行为将是随机的。可以随机开始等。

标签: javaandroidandroid-activitytimerchronometer

解决方案


推荐阅读