Timer 屏幕上未显示计时器
我不熟悉android编码,我写这段代码是为了帮助我评估自己的进度,以及对android编码的理解。定时器应在按下启动按钮后启动。根据调试,我认为程序运行正确。但屏幕上并没有定时器输出 请帮忙,谢谢 .XML文件Timer 屏幕上未显示计时器,timer,Timer,我不熟悉android编码,我写这段代码是为了帮助我评估自己的进度,以及对android编码的理解。定时器应在按下启动按钮后启动。根据调试,我认为程序运行正确。但屏幕上并没有定时器输出 请帮忙,谢谢 .XML文件 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="htt
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.android.clockproject.MainActivity">
<Button
android:id="@+id/startButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:text="START"
android:onClick="collectTime"/>
<TextView
android:id="@+id/digits_display"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=""
android:textSize="50sp"
android:layout_centerInParent="true"
/>
</RelativeLayout>
.Java文件
package com.example.android.clockproject;
import android.os.Build;
import android.support.annotation.RequiresApi;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import static android.R.attr.button;
import static android.R.attr.onClick;
public class MainActivity extends AppCompatActivity {
int hours = 0;
String hoursDisplay = "00";
int minutes = 0;
String minutesDisplay = "00";
int seconds = 0;
String secondsDisplay = "00";
int milliSecond = 0;
String millisecondDisplay = "0";
String fullTimeDisplay;
int loop = 7;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
/**
* method collectTime is called when "start" button is pressed
*/
public void collectTime(View view) {
while (loop == 7) {
fullTimeDisplay = hoursDisplay + ":" + minutesDisplay + ":" + secondsDisplay + "." + millisecondDisplay;
displayMessage(fullTimeDisplay);
firstDigit();
}
}
/**
* method is called to increse hours
*
* @param hours
* @return
*/
private String forthDigit(int hours) {
hours = hours + 1;
if (hours == 13) {
hours = 0;
}
if (hours < 10) {
hoursDisplay = "0" + hours;
} else {
hoursDisplay = "" + hours;
}
return hoursDisplay;
}
/**
* method is called to increase minutes
*
* @param minutes
* @return
*/
private String thirdDigit(int minutes) {
minutes = minutes + 1;
if (minutes == 60) {
forthDigit(hours);
minutes = 0;
}
if (minutes < 10) {
minutesDisplay = "0" + minutes;
} else {
minutesDisplay = "" + minutes;
}
return minutesDisplay;
}
/**
* method called to increase seconds
*
* @return
*/
private int secondDigit() {
seconds = seconds + 1;
if (seconds == 60) {
thirdDigit(minutes);
seconds = 0;
}
if (seconds < 10) {
secondsDisplay = "0" + seconds;
} else {
secondsDisplay = "" + seconds;
}
return seconds;
}
/**
* method called to increase milliseconds
*/
private void firstDigit() {
milliSecond = milliSecond + 1;
if (milliSecond > 9) {
milliSecond = 0;
millisecondDisplay = "0";
secondDigit();
}
millisecondDisplay = "" + milliSecond;
}
/**
* This method displays the given fullTimeDisplay "the clock" on the screen.
*/
public void displayMessage(String fullTimeDisplay) {
TextView timeDisplayTextView = (TextView) findViewById(R.id.digits_display);
timeDisplayTextView.setText(fullTimeDisplay);
}
}
package com.example.android.clockproject;
导入android.os.Build;
导入android.support.annotation.RequiresApi;
导入android.support.v7.app.AppActivity;
导入android.os.Bundle;
导入android.view.view;
导入android.widget.TextView;
导入静态android.R.attr.button;
导入静态android.R.attr.onClick;
公共类MainActivity扩展了AppCompatActivity{
整小时=0;
字符串hoursDisplay=“00”;
整数分钟=0;
字符串分钟数display=“00”;
整数秒=0;
字符串secondsDisplay=“00”;
int毫秒=0;
字符串毫秒显示=“0”;
字符串全时显示;
int循环=7;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
/**
*方法collectTime在按下“开始”按钮时调用
*/
公共时间(查看){
while(循环==7){
fullTimeDisplay=小时显示+“:”+分钟显示+“:“+秒显示+”+毫秒显示;
显示信息(全天显示);
第一位数();
}
}
/**
*方法以增加小时数
*
*@param小时
*@返回
*/
专用字符串forthDigit(整数小时){
小时=小时+1;
如果(小时==13){
小时=0;
}
如果(小时<10){
小时显示=“0”+小时;
}否则{
hoursDisplay=“”+小时;
}
返回时间显示;
}
/**
*方法以增加分钟数
*
*@param分钟
*@返回
*/
私有字符串thirdDigit(整数分钟){
分钟=分钟+1;
如果(分钟==60){
forthDigit(小时);
分钟=0;
}
如果(分钟<10){
分钟显示=“0”+分钟;
}否则{
分钟显示=”+分钟;
}
返回分钟显示;
}
/**
*方法以增加秒数
*
*@返回
*/
私有整数第二位数(){
秒=秒+1;
如果(秒==60){
第三位数(分钟);
秒=0;
}
如果(秒<10){
秒显示=“0”+秒;
}否则{
secondsDisplay=“”+秒;
}
返回秒数;
}
/**
*方法以增加毫秒数
*/
私有void firstDigit(){
毫秒=毫秒+1;
如果(毫秒>9){
毫秒=0;
毫秒显示=“0”;
第二位数();
}
毫秒显示=”+毫秒;
}
/**
*此方法在屏幕上显示给定的全天显示“时钟”。
*/
public void displayMessage(字符串fullTimeDisplay){
TextView timeDisplayTextView=(TextView)findViewById(R.id.digits\u显示);
timeDisplayTextView.setText(全天显示);
}
}
您尚未发布xml布局文件,因此很难提供帮助。
首先,我将尝试使用测试字符串从onCreate()调用displayMessage()函数。如果这不起作用,那么问题出在您的xml布局中,您需要将其添加到问题中,这样我们就可以看到哪里出了问题
编辑:
我第一次没看到这个。
如果你使用while循环来阻止主线程直到它完成,我不明白为什么它不设置文本,但是无论如何while循环都不是一个好的解决方案,因为你将来尝试运行的其他代码将无法工作
我建议将collectTime()函数更改为:
public void collectTime(View view) {
// 30,000 milliseconds is 30 seconds, the 1000 is how many
milliseoncds to wait before calling the onTick
CountDownTimer timer = new CountDownTimer(30000, 1000) {
public void onTick(long millisUntilFinished) {
timeDisplayTextView.setText("seconds remaining: " + millisUntilFinished / 1000);
}
public void onFinish() {
timeDisplayTextView.setText("done!");
// restarts the time to run 30 seconds again
timer.start();
}
}.start();
}
我用.XML重新发布了displayMessage(),没有while函数,太好了。我使用了你给我的代码,它起作用了,然后我用timeDisplayTextView.setView替换为显示TimeDisplay。我添加了firstDidit()开始计算。程序运行30秒。我如何用无穷大替换30000,这样程序就不会结束?请参见编辑,或者只使用Long.MAX_值作为毫秒,它将运行大约3亿年