У меня есть приложение, в котором рассказывается, сколько часов в школе (P). У меня есть textview с текстом Time: (Hours to go). Это должно быть 6.2, но на данный момент это 6, а затем, когда я нажимаю кнопку запуска, говорит, что школа завершена мгновенно, а затем падает. О, я хочу показать время в часах, как это (6.2 = 6 часов 20 минут). В чем может быть проблема?
Код startActivity:
package com.nieeli.timer;
import android.app.Activity;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class startActivity extends Activity implements OnClickListener {
private static final String tag = "Main";
private MalibuCountDownTimer countDownTimer;
private long timeElapsed;
private boolean timerHasStarted = false;
private Button startB;
private TextView text;
private TextView timeElapsedView;
private final long startTime = 22500000/3600000;
private final long interval = 1/100;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
startB = (Button) this.findViewById(R.id.button);
startB.setOnClickListener(this);
text = (TextView) this.findViewById(R.id.timer);
timeElapsedView = (TextView) this.findViewById(R.id.timeElapsed);
countDownTimer = new MalibuCountDownTimer(startTime, interval);
text.setText(text.getText() + String.valueOf(startTime));
}
public void onClick(View v) {
if (!timerHasStarted) {
countDownTimer.start();
timerHasStarted = true;
startB.setText("Start");
} else {
countDownTimer.cancel();
timerHasStarted = false;
startB.setText("Stop and Reset");
}
}
// CountDownTimer class
public class MalibuCountDownTimer extends CountDownTimer {
public MalibuCountDownTimer(long startTime, long interval) {
super(startTime, interval);
}
@Override
public void onFinish() {
text.setText("School Finished!");
timeElapsedView.setText("Time Passed: "
+ String.valueOf(startTime));
}
@Override
public void onTick(long millisUntilFinished) {
text.setText("Time remain:" + millisUntilFinished);
timeElapsed = startTime - millisUntilFinished;
timeElapsedView.setText("Time Left: "
+ String.valueOf(timeElapsed));
}
}
}
Не внесены изменения в манифест или макет.
Спасибо
Во-первых, помните, что long является целым типом. частный конечный длинный интервал = 1/100; Не эквивалентен 0,01; Я считаю, что это сработает до нуля. Кроме того, это то, как часто вы хотите, чтобы ваш onTick был вызван; Я считаю, что вы пытаетесь сказать, что хотите, чтобы его вызывали каждые 0,01 миллисекунды, что кажется чрезмерным. Возможно, вы имели в виду каждые 100 миллисекунд (десять раз в секунду)?
Вы также можете поменять местами строки startB.setText так, чтобы, когда он остановлен, он показывает "Пуск", и когда он запускается, он показывает "остановлен",
Вы хотите конвертировать миллисекунды в часы и минуты? Вы можете попробовать что-то вроде этого: long totalMinutes = millis/1000/60; длинные часы = миллис /60; длинные минуты = totalMinutes - (часы * 60);
EDIT: Есть два основных подхода, если вы хотите, чтобы ваш номер обратного отсчета (6.2, представляющий 6 часов и 20 минут) уменьшался на.1 каждые десять минут.
Первый вариант - установить "интервал" на 10 * 60 * 1000 (количество миллисекунд за десять минут). Затем в onTick возьмите число с плавающей точкой (10.0 или другое) и уменьшите на 0,1. Это может быть быстрый и грязный метод, если он даже работает, но он не идеален.
Второй - сделать то, что я описал выше. Затем, когда у вас есть количество часов и количество минут: float timeRemaining = (float) hours + (float) minutes/100 используют String.format для отображения его в текстовом виде. Что-то вроде String.format("%. 1f% n", timeRemaining), чтобы показать его только с одной десятичной точкой.
Я на самом деле не пробовал код, но, с головы до ног, это должно дать вам несколько советов, которые помогут вам в правильном направлении.