Android 正在格式化00:00:00不工作的倒计时计时器。显示00:00:00直到暂停,然后显示剩余时间

Android 正在格式化00:00:00不工作的倒计时计时器。显示00:00:00直到暂停,然后显示剩余时间,android,Android,我试图从中创建一个倒计时计时器,但我无法使其使用本文中描述的我想要的00:00:00格式。计时器将启动并允许我暂停,它将运行两分钟,但您无法看到它正在运行。如果你暂停,你可以看到还有多少时间,但你知道我无法让它工作。如果没有格式化,它可以正常工作并倒计时。有没有人知道如何解决这个问题?我一直在四处搜索,找不到任何包含这种格式倒计时计时器的内容。任何帮助都将不胜感激 TextView timeDisplay; MyCount counter; int state = 0; int

我试图从中创建一个倒计时计时器,但我无法使其使用本文中描述的我想要的00:00:00格式。计时器将启动并允许我暂停,它将运行两分钟,但您无法看到它正在运行。如果你暂停,你可以看到还有多少时间,但你知道我无法让它工作。如果没有格式化,它可以正常工作并倒计时。有没有人知道如何解决这个问题?我一直在四处搜索,找不到任何包含这种格式倒计时计时器的内容。任何帮助都将不胜感激

  TextView timeDisplay;
  MyCount counter;
  int state = 0;
  int length = 120000;
  long startTime = 0;
  long currentTime = 0;
  long timeElapsed = 0;
  long timeRemaining = 0;
  long prevTimeRemaining = 0;
  Button control;

    public String formatTime(long millis) {
          String output = "00:00:00";
          long seconds = millis / 1000;
          long minutes = seconds / 60;
          long hours = minutes / 60;

          seconds = seconds % 60;
          minutes = minutes % 60;
          hours = hours % 60;

          String secondsD = String.valueOf(seconds);
          String minutesD = String.valueOf(minutes);
          String hoursD = String.valueOf(hours); 

          if (seconds < 10)
            secondsD = "0" + seconds;
          if (minutes < 10)
            minutesD = "0" + minutes;
          if (hours < 10)
            hoursD = "0" + hours;

          output = hoursD + " : " + minutesD + " : " + secondsD;
          return output;
        }

  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.countdown);

    timeDisplay = (TextView) findViewById(R.id.timer);
    control = (Button) findViewById(R.id.control);
    counter = new MyCount (length, 1000);
  }

  public void control(View view) {
    switch (state) {
    case 0:
      startTime = System.currentTimeMillis();
      counter.start();
      control.setText(R.string.pause);
      state = 1;
      break;
    case 1:
      // pause
      currentTime = System.currentTimeMillis();
      timeElapsed = currentTime - startTime;
      if (prevTimeRemaining == 0)
        timeRemaining = length - timeElapsed;
      else
        timeRemaining = prevTimeRemaining - timeElapsed;
      counter.cancel();
      timeDisplay.setText("" + formatTime(timeRemaining));
      control.setText(R.string.resume);
      prevTimeRemaining = timeRemaining;

      // resume
      counter = new MyCount(timeRemaining, 1000);
      state = 0;
      break;
    case 2:
      prevTimeRemaining = 0;
      counter = new MyCount(length, 1000);
      control.setText(R.string.start);
      timeDisplay.setText(R.string.timer);
      state = 0;
    }
  }

  public class MyCount extends CountDownTimer {

    public MyCount(long millisInFuture, long countDownInterval) {
      super(millisInFuture, countDownInterval);
    }

    public void onFinish() {
      timeDisplay.setText("done!");
      state = 2;
     control.setText(R.string.restart);
    }

    public void onTick (long millisUntilFinished) {
      timeDisplay.setText ("Left: " + formatTime(timeRemaining));

    }

  }

}
TextView时间显示;
计数计数器;
int state=0;
整数长度=120000;
长起始时间=0;
长电流时间=0;
长时间运行=0;
长时间剩余=0;
长时间剩余=0;
按钮控制;
公共字符串格式化时间(长毫秒){
字符串输出=“00:00:00”;
长秒=毫秒/1000;
长分钟=秒/60;
长时间=分钟/60;
秒=秒%60;
分钟=分钟%60;
小时数=小时数%60;
String secondsD=String.valueOf(秒);
String minutesD=String.valueOf(分钟);
String hoursD=String.valueOf(小时);
如果(秒<10)
secondsD=“0”+秒;
如果(分钟<10)
分钟数d=“0”+分钟;
如果(小时<10)
hoursD=“0”+小时;
输出=小时数+“:”+分钟数+“:”+秒数;
返回输出;
}
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(右布局、倒计时);
timeDisplay=(TextView)findViewById(R.id.timer);
控件=(按钮)findViewById(R.id.control);
计数器=新的MyCount(长度,1000);
}
公共无效控件(视图){
开关(状态){
案例0:
startTime=System.currentTimeMillis();
counter.start();
control.setText(R.string.pause);
状态=1;
打破
案例1:
//停顿
currentTime=System.currentTimeMillis();
时间经过=当前时间-开始时间;
如果(prevTimeRemaining==0)
剩余时间=长度-经过的时间;
其他的
timeRemaining=prevTimeRemaining-时间流逝;
counter.cancel();
timeDisplay.setText(“+formatTime(剩余时间));
control.setText(R.string.resume);
PrevTime剩余=剩余时间;
//恢复
计数器=新的MyCount(剩余时间,1000);
状态=0;
打破
案例2:
prevTimeRemaining=0;
计数器=新的MyCount(长度,1000);
control.setText(R.string.start);
timeDisplay.setText(R.string.timer);
状态=0;
}
}
公共类MyCount扩展了倒计时{
公共MyCount(长百万未来,长倒计时间隔){
超级(毫秒未来,倒计时间隔);
}
公共无效onFinish(){
timeDisplay.setText(“完成!”);
状态=2;
control.setText(R.string.restart);
}
公共void onTick(长毫秒未完成){
timeDisplay.setText(“左:“+formatTime(剩余时间));
}
}
}

运算符“+”的优先级高于除法。因此,您尝试将字符串除以100。可以使用括号来表示顺序


我让它工作了。最初是timeDisplay.setText(“左:“+formatTime(剩余时间));was timeDisplay.setText(“左:+millisuntillfinished/100”);我曾尝试将formatTime放在MillisonFinished前面,但没有成功,但我尝试在没有/100的情况下使用它,然后请回答并检查您自己的答案,以便将此问题从未回答列表中删除。