2014-01-26 23 views
0

我对如何使用异步感到困惑。我希望它在单击按钮后立即更新UI,而不必杀死活动并重新实例化它。在后台,我希望它等待点击来更新用户界面,点击后我希望它确定是否点击了正确的按钮。我正在使用布尔isUserRight();以确定答案是否正确,然后我使用resetButtons();重置按钮(显然),然后setButtons();改变按钮。我已经写出了所有的方法,我只是不知道如何将它们实现到Async中。我需要立即更新UI以更改按钮的颜色。我不需要任何方法,按钮颜色等方面的帮助,只需要Async,而且我也不会要求任何人把勺子给我,只要给我一点点推动就可以了。任何帮助都会很好,谢谢你们!Android - 使用异步来更新用户界面

TL; DR需要按键使用异步使按键颜色不会被卡住推我没有重新启动活动更新UI后更新UI。我不需要整个代码,只需要一点点指导即可。

编辑:添加了一些代码。

这是对我的onCreate();

buttons[0] = (Button)findViewById(R.id.b0); 
    buttons[1] = (Button)findViewById(R.id.b1); 
    buttons[2] = (Button)findViewById(R.id.b2); 
    buttons[3] = (Button)findViewById(R.id.b3); 
    buttons[0].setOnClickListener(this); 
    buttons[1].setOnClickListener(this); 
    buttons[2].setOnClickListener(this); 
    buttons[3].setOnClickListener(this); 

然后在我的onClick,我有按钮,所有去这个方法的开关:

public boolean isUserRight() { 
     if(correct == 1) { 
       onButton(); 
      return true; 
      //Toast.makeText(getApplicationContext(), "Good job!", Toast.LENGTH_SHORT).show(); 
      //buttons[test].getBackground().setColorFilter(Color.GREEN, PorterDuff.Mode.MULTIPLY); 
     } 
     onButton(); 
     return false; 
    } 


    public void onButton() { 
     int rnd = new Random().nextInt(buttons.length); 
     test = rnd; 
     buttons[rnd].getBackground().setColorFilter(Color.YELLOW, PorterDuff.Mode.MULTIPLY); 
     //ResetButtons(); 
    } 

而且这工作得很好,唯一的问题是被点击第一个按钮之后,颜色停止改变和更新。

+0

http://developer.android.com/reference/android/os/AsyncTask.html – Raghunandan

+1

如果我没有得到它,你不应该使用异步做你想做什么。如果你在你的问题中添加一些代码会很有用。无论如何,你是否在你的按钮上设置了一个OnClickedListener,并且你在更新UI吗? – Lauw

+1

是的,我把一个听众放在按钮上。我的问题是我改变了按钮的颜色,但UI并没有被更新,所以按钮颜色保持原来的颜色,直到你再次按下另一个按钮,基本上它已经落后了。我只需要立即刷新UI,即可立即改变颜色。 – Tyson

回答

1

好的,我修好了。感谢所有的帮助,对于任何想知道我如何修复它的人,我使用的是view.invalidate,它并没有指向任何东西,所以我不得不将其更改为按钮阵列,例如:

buttons [1 ] .invalidate();那会刷新按钮而不是整个活动。

1
void test(){ 
    final Handler mHandler = new Handler(){ 

     @Override 
     public void handleMessage(Message msg) { 
      // TODO Auto-generated method stub 
      super.handleMessage(msg); 
      if(msg.what == 0){ 
       // update your ui 

      } 

     } 

    }; 

    new Thread(new Runnable() { 
     public void run() { 
      // do network job 
      // do something you want here 
      mHandler.sendEmptyMessage(0); 
     } 
    }).start(); 

}