我正在尝试更改View
的背景颜色,该颜色充当与其他声音样本一起打勾的正方形。
当我去运行它时,它会出现错误:
ViewRootImpl $ CalledFromWrongThreadException:只有创建视图层次结构的原始线程才能触及其视图。
有人可以提供解决方案吗?
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.act2);
final View square = (View)findViewById(R.id.rec);
tone = new TimerTask() {
@Override
public void run() {
if (sound[0] % 4 != 0) {
s2.start();
sound[0] += 1;
square.setBackgroundColor(Color.parseColor("#ff0000"));
} else {
s2.start();
sound[0] = 1;
square.setBackgroundColor(Color.parseColor("#00ff00"));
}
}
};
}
代码的声音部分工作正常,就在我尝试使用View
时。
答案 0 :(得分:0)
将UI相关代码移动到UI线程。你不能更新ui形式的TimerTask
代码:
tone = new TimerTask() {
@Override
public void run() {
if (sound[0] % 4 != 0) {
s2.start();
sound[0] += 1;
runOnUiThread(new Runnable() {
@Override
public void run() {
square.setBackgroundColor(Color.parseColor("#ff0000"));
}
});
答案 1 :(得分:0)
计时器任务中的void run方法是在新线程而不是UI线程上。你不能在这个线程中设置setBackgroundColor。您应该在UI线程中执行以下操作。
runOnUiThread(new Runnable() {
@Override
public void run() {
square.setBackgroundColor(Color.parseColor("#ff0000"));
}
});