android - CountDownTimer 错误地将文本设置为比要求的更多视图
问题描述
在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);
}
});
}
然而,当计时器结束时,R.string.times_up
值将被强制转换为两者timer
和speedTextView
视图。我更改了 2 行的顺序,在这种情况下,speedValue
在两个视图上都进行了转换,尽管它们应该是 2 个不同的方法调用。
setText
方法是一种修改后的方法,可以在主线程而不是像这样的后台线程上运行它们
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);
}
});
}
或者
private void setText(final TextView text, String value) {
speedValueToSetText = value;
final String resultValue = value;
runOnUiThread(new Runnable() {
@Override
public void run() {
text.setText(resultValue);
}
});
}
推荐阅读
- html - 为什么我的背景图像变大了?
- python - 对于某些测试用例,Django 不会重新加载夹具
- swift - 无法调用非函数类型“MPMusicPlayerController”的值
- android - InvalidConfigurationException:未使用 AmazonCognitoSync 服务为 SNS 设置身份池
- c - malloc() 和 realloc() 结构
- scala - 使用具有持久性的actor作为购物车,这样每个访问者都会有自己的actor
- python-3.x - 是否可以使用 pip freeze 从 requirements.txt 中排除 IDE 包?
- java - 索引和顺序数据结构之间的区别
- python - python- fig.add_shape 和 add_annotation 的问题
- sql - 在 VBA 中具有 n 个 WHERE 参数的 SQL 查询