开发者

Why not change color when pressed?

when you click the color should change to another but it doesnt work! My code:

#
   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-generate开发者_开发知识库d 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;

    }
}

}


When the button is clicked, you're incrementing i - but you won't be running the switch/case statement again. If you look in the debugger you'll find that the variable value is changing, but you haven't instructed any part of the display to change.

You should put that common logic in a separate method which is called both from the onCreate method and the OnClickListener. For example:

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;   
    }
}

There are various other things I'd change about this code, but that should at least get you over this hump.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜