Почему бы не изменить цвет при нажатии? - PullRequest
1 голос
/ 23 сентября 2011

при нажатии цвет должен измениться на другой , но он не работает!Мой код:

#
   public class CreateActivity extends Activity {

TableLayout table;
Integer i;
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
      table = (TableLayout)findViewById(R.id.myTable);

    Button left = (Button) findViewById(R.id.buttonLeft);
    Button right = (Button) findViewById(R.id.buttonRight);
    TextView color = (TextView) findViewById(R.id.text);

     i=0;

    right.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
            // TODO Auto-generated method stub
        i++; //+1
        }
    });
       //COLOR
    switch(i){
    case 1: table.setBackgroundColor(Color.RED); break;
    case 2: table.setBackgroundColor(Color.rgb (255, 127, 0) ); break;
    case 3: table.setBackgroundColor(Color.YELLOW); break;
    case 4: table.setBackgroundColor(Color.GREEN) ; break;
    case 5: table.setBackgroundColor(Color.rgb (0,191,255) ); break;
    case 6: table.setBackgroundColor(Color.BLUE ); break;
    case 7: table.setBackgroundColor(Color.rgb (160,32,240) ); break;

    }
}

}

1 Ответ

2 голосов
/ 23 сентября 2011

Когда кнопка нажата, вы увеличиваете i - но вы больше не будете запускать оператор switch / case.Если вы заглянете в отладчик, то увидите, что значение переменной меняется, но вы не дали указание ни одной части дисплея изменить.отдельный метод, который вызывается как из onCreate метода , так и OnClickListener.Например:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    table = (TableLayout)findViewById(R.id.myTable);

    Button left = (Button) findViewById(R.id.buttonLeft);
    Button right = (Button) findViewById(R.id.buttonRight);
    TextView color = (TextView) findViewById(R.id.text);

    i=0;

    right.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            i++;
            // Cycle round
            if (i == 8) {
               i = 1;
            }
            applyBackgroundColor();
        }
    });

    applyBackgroundColor();
}

private void applyBackgroundColor() {
    switch(i) {
        // TODO: Consider what you want to do when i is 0...
        case 1: table.setBackgroundColor(Color.RED); break;
        case 2: table.setBackgroundColor(Color.rgb(255, 127, 0)); break;
        case 3: table.setBackgroundColor(Color.YELLOW); break;
        case 4: table.setBackgroundColor(Color.GREEN); break;
        case 5: table.setBackgroundColor(Color.rgb(0,191,255)); break;
        case 6: table.setBackgroundColor(Color.BLUE); break;
        case 7: table.setBackgroundColor(Color.rgb(160,32,240)); break;   
    }
}

В этом коде я бы изменил и другие вещи, но это, по крайней мере, поможет вам преодолеть этот горб.

...