我的问题是: 我写了一个小的Android应用程序,它使用了很多ImageViews。 他们的图像必须在代码中更改。 到目前为止,它工作得很好,但我想添加一种显示正确答案的算法(这是一个游戏)。 它们应该一个接一个地出现。
public void x (int current,final View v)
{
c = current;
if(attached[current])
{
apply_change(c);
}
if(current < 34)
{
if(attached[current+1])
{
new java.util.Timer().schedule(new java.util.TimerTask(){
public void run(){
x(c+1,v);
}},500);
}
else
{
x(c+1,v);
}
}
else
new java.util.Timer().schedule(new java.util.TimerTask(){
public void run(){
//NewGame_Click(v);
finished = true;
}},1);
}
从这些线程中我无法更改我的ImageViews的图像(CalledFromWrongThreadException)。 所以我试着这样做:
while(!finished)
{
akt();
}
在我的UI线程中。 问题是,我的akt();函数(它改变了图像)运行,但是在没有完成所有的Timer-Threads之前,我的Debug-Phone的屏幕上都看不到任何东西。
我做错了什么?
答案 0 :(得分:0)
使用处理程序。计时器任务在不同的线程上运行。所以你不能从它更新ui。您应该在主UI线程上更新ui。你可以在timer tak run方法中使用handler或runonuithread来更新ui。但我建议你使用处理程序
Handler m_handler;
Runnable m_handlerTask ;
m_handler = new Handler();
m_handlerTask = new Runnable()
{
@Override
public void run() {
// do something
m_handler.postDelayed(m_handlerTask, 1000); // instad of 1000 mention the delay in milliseconds
}
};
m_handlerTask.run();
或使用
runOnUiThread(new Runnable(){
@Override
public void run(){
//update ui here
}
});