我有一个应用程序告诉我上学时间(:P)。我有一个文本视图,文本时间:(小时)。这应该是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));
}
}
}
没有对清单或布局进行任何更改。
谢谢:D
答案 0 :(得分:3)
首先,请记住long是整数类型。 私人最终长间隔= 1/100; 不等于0.01;我相信它会达到零。此外,这是您希望调用onTick的频率;我相信你试图说你想要每0.01毫秒调用一次,这看起来过分了。也许你的意思是每100毫秒(每秒十次)?
您可能还想交换startB.setText行,以便在它停止时显示“Start”,当它启动时显示“stopped”
您想将毫秒转换为小时和分钟?你可以尝试这样的事情: long totalMinutes = millis / 1000/60; 长时间=毫秒/ 60; long minutes = totalMinutes - (小时* 60);
编辑: 如果您希望倒计时数(6.2代表6小时20分钟)每十分钟减少0.1,则有两种主要方法。
第一个选项是将“interval”设置为10 * 60 * 1000(十分钟内的毫秒数)。然后在onTick中,取一个浮点数(10.0或其他)并减去0.1。这可能是一种快速而肮脏的方法,如果它甚至有效,但它并不理想。
第二个是做我上面所描述的。然后,当您有小时数和分钟数时: float timeRemaining =(float)hours +(float)minutes / 100 使用String.format在textview中显示它。就像是 String.format(“%。1f%n”,timeRemaining) 只显示一个小数点显示它。
我实际上并没有尝试过这些代码 - 但是,除了我的头脑之外,这应该会给你一些提示,引导你朝着正确的方向前进。