2013-10-07 30 views
-2

我做了這段代碼,想多次開啓和關閉交通燈,然後停下來隨意選擇兩盞燈中的一盞燈,但該程序執行操作,但未顯示改變燈的操作確實爲什麼交通燈不工作

private ImageView redLight; 
private ImageView greenLight; 
private Button Button; 



@Override 
protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 


    setContentView(R.layout.traffic_lights); 


    redLight = (ImageView) findViewById(R.id.red_light); 
    greenLight = (ImageView) findViewById(R.id.green_light); 
    Button = (Button) findViewById(R.id.start_button); 


    // Assign click listeners to buttons 
    Button.setOnClickListener(this); 

} 


@Override 
public void onClick(View v) { 
    if (v == Button) { 
     int flag = 0; 
     for (int i = 0; i <= 100; i++) { 
      if (flag == 0) { 
       turnOnRedLight(); 
       try { 
        Thread.sleep(100); 
       } catch (InterruptedException ex) { 
        Thread.currentThread().interrupt(); 
       } 
       Log.i("Traffic", "Red"); 
       flag = 1; 
      } else { 
       turnOnGreenLight(); 
       try { 
        Thread.sleep(100); 
       } catch (InterruptedException ex) { 
        Thread.currentThread().interrupt(); 
       } 
       Log.i("Traffic", "Green"); 
       flag = 0; 
      } 
     } 
    } 

} 



private void turnOnRedLight() { 
    redLight.setImageResource(R.drawable.red_on); 
} 

private void turnOnGreenLight() { 
    greenLight.setImageResource(R.drawable.green_on); 
} 

}

+0

那它做了什麼? –

回答

1

你只沉睡了100毫秒,所以你可能看不到信號燈轉變。改變,要像1000或者甚至500,你可能會看到的變化

Thread.sleep(1000); 

此外,一對夫婦指出

  1. 雖然這些代碼可能不會是一個問題,睡在UI Thread通常不是一個好主意。使用Thread和更新UIrunOnUiThread(),使用AsyncTaskHandler
  2. 不要命名您的Button「按鈕」。將它命名爲不是Android關鍵字的東西,如button,btn,,startBtn或類似的東西。
  3. 當區分點擊哪個Button時,請使用Buttonid而不是Object。所以,你想將其更改爲

    @Override 
    public void onClick(View v) { 
    if (v.getId() == (R.id.start_button)) { 
    

你也可以在這裏,但並不重要,使用switch聲明。