为什么在打开smarphone并使用CountDownTimer后不能在按钮上绘制文本?
问题描述:
尝试实现应该显示在按钮上的CountDownTimer。只要我不转动智能手机,它就可以正常工作。打开智能手机后,按钮仅显示初始值文本,即使牛仔时尚仍在运行。有人知道为什么在打开智能手机后,myButton.setText()方法在onTick()方法中不起作用吗?为什么在打开smarphone并使用CountDownTimer后不能在按钮上绘制文本?
public class MainActivity extends AppCompatActivity {
private TextView mTextMessage;
private TextView myTextView;
private Button myButton;
private CountDownTimer countDownTimer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTextMessage = (TextView) findViewById(R.id.message);
myTextView= (TextView) findViewById(R.id.textView);
myButton= (Button) findViewById(R.id.button);
myTextView.setText("Set new text");
myButton.setText("Set Button text");
myButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
myButton.setText("Button clicked");
countDownTimer = new CountDownTimer(60 * 1000, 1000) {
@Override
public void onTick(long millisUntilFinished) {
//After turning the Smartphone the follow both methods do not work anymore
myButton.setText("Calc: " + millisUntilFinished/1000);
myTextView.setText("Calc: " + millisUntilFinished/1000);
}
@Override
public void onFinish() {
}
};
//timer started
countDownTimer.start();
}
});
}
}
答
这里是我的代码示例... 请注意,我说的“DONE”文本在onFinish()方法,这样你就可以设置文字为你希望所有的UI组件......而且我在应用程序在后台运行的情况下添加if语句,以防在应用程序在后台运行之前保存一些信息
@Override
protected void onCreate(Bundle savedInstanceState) {
...
myButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
myButton.setText("Button clicked");
countDownTimer = new CountDownTimer(3000, 1000) {
@Override
public void onTick(long millisUntilFinished) {
//After turning the Smartphone the follow both methods do not work anymore
if (!runningBackground) {
myButton.setText("Calc: " + millisUntilFinished/1000);
myTextView.setText("Calc: " + millisUntilFinished/1000);
} else {
//Do something
}
}
@Override
public void onFinish() {
if (!runningBackground) {
//Do something
}
mTextMessage.setText("DONE");
runningBackground = false;
running = false;
}
};
//timer started
countDownTimer.start();
running = true;
}
});
}
@Override
protected void onResume() {
super.onResume();
runningBackground = false;
}
@Override
protected void onPause() {
runningBackground = true;
super.onPause();
}
请检查onFinish是否在您打开设备。 – AndroidStorm
开启智能手机后不会调用完成。我也可以连接调试器,看到转动后计时器仍然运行。但myButton.setText(“Calc:”+ millisUntilFinished/1000); 方法不显示值。 –
一般来说,我不认为你会对这段代码感到满意。例如:你有没有看到当你点击按钮第二次或第三次可以说在初始敲击后5秒钟后会发生什么? – Barns