-2

私はこのコードを実行し、信号機を数回オン/オフしてから、停止して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);
}

}

4

1 に答える 1

1

あなたは 100 ミリ秒しか寝ていないので、おそらくライトの変化を見ていないでしょう。これを 1000 または 500 などに変更すると、おそらく変更が見られるでしょう。

Thread.sleep(1000);

また、いくつかの注意事項

  1. このコードでは問題にならないかもしれませんが、UI Thread通常は でスリープすることはお勧めできません。a を使用し、 、 use 、またはThreadで更新UIします。runOnUiThread()AsyncTaskHandler
  2. Button「ボタン」に名前を付けないでください。、、、、などbuttonのAndroid キーワードbtnではない名前を付けます。startButtonstartBtn
  3. Buttonどちらがクリックされたかを区別するときは、 のButton id代わりに を使用しますObject。だからあなたはそれをに変更したいでしょう

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

switchここでステートメントを使用することもできますが、重要ではありません。

于 2013-10-08T00:05:22.013 に答える