Android 倒计时错误地将文本设置为超出要求的视图
在Android 倒计时错误地将文本设置为超出要求的视图,android,Android,在CountDownTimeronFinish方法中,我想将2个字符串设置为2个不同的视图,如下所示 public void onFinish() { setText(timer, getString(R.string.times_up)); setText(speedTextView, speedValue); setColorTimer(timer, Color.RED); runOnUiTh
CountDownTimer
onFinish
方法中,我想将2个字符串设置为2个不同的视图,如下所示
public void onFinish() {
setText(timer, getString(R.string.times_up));
setText(speedTextView, speedValue);
setColorTimer(timer, Color.RED);
runOnUiThread(new Runnable() {
public void run() {
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
Intent intent = new Intent(getApplicationContext(), ResultActivity.class);
startActivity(intent);
}
}, 3000);
}
});
}
private void setText(final TextView text, String value) {
speedValueToSetText = value;
runOnUiThread(new Runnable() {
@Override
public void run() {
text.setText(speedValueToSetText);
}
});
}
但是,当计时器完成时,R.string.times\u up
值将同时转换为timer
和speedTextView
视图。我更改了这两行的顺序,在这种情况下,speedValue
在两个视图上都被强制转换,尽管它们应该是两个不同的方法调用
setText
方法是一个经过修改的方法,可以在主线程而不是像这样在后台线程上运行它们
public void onFinish() {
setText(timer, getString(R.string.times_up));
setText(speedTextView, speedValue);
setColorTimer(timer, Color.RED);
runOnUiThread(new Runnable() {
public void run() {
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
Intent intent = new Intent(getApplicationContext(), ResultActivity.class);
startActivity(intent);
}
}, 3000);
}
});
}
private void setText(final TextView text, String value) {
speedValueToSetText = value;
runOnUiThread(new Runnable() {
@Override
public void run() {
text.setText(speedValueToSetText);
}
});
}
我如何解决这个问题?setText方法不应该相互独立吗?全局变量
speedValueToSetText
导致错误。删除此行speedValueToSetText=value代码>。setText
应该是
private void setText(final TextView text, String value) {
runOnUiThread(new Runnable() {
@Override
public void run() {
text.setText(value);
}
});
}
或
计时器在哪里?那么它将要求字符串是最终的,我希望它更新,所以我应该避免它。如果您需要speedValueToSetText
,您可以如下编辑代码,private void setText(final TextView text,String value){speedValueToSetText=value;final String resultValue=value;runOnUiThread(new Runnable(){@Override public void run(){text.setText(resultValue);}}}}}}我已经更新了我的答案。它起作用了,谢谢,但我能问一下它为什么会这样做吗?speedValueToSetText=value;
和text.setText(speedValueToSetText);
处于不同的线程中。在某些情况下,A可能工作了5分钟,但B没有启动。