0

我的问题是:我写了一个小 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(); 功能(它改变图像)运行,但在不是所有的定时器线程完成之前,我的调试电话屏幕上什么也看不到。

我究竟做错了什么?

4

1 回答 1

0

使用处理程序。定时器任务在不同的线程上运行。所以你不能从中更新ui。您应该在主 UI 线程上更新 ui。您可以在 timer tak run 方法中使用处理程序或 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

              }
           });
于 2013-05-29T19:57:09.417 回答