按钮数组的监听器

时间:2013-05-06 15:46:32

标签: android

对于我自己的练习,我是在实例字段中创建一个包含3个按钮的数组,我希望所有这些按钮都有setOnClickListeners,它允许每个按钮更改文本View的BackGround颜色。任何人都可以指导我朝着正确的方向前进。这是我的代码:

         public class MainActivity extends Activity {

      Button b = {(Button)findViewById(R.id.button1), 
                  (Button)findViewById(R.id.button2),
                   (Button)findViewById(R.id.button3),};

     TextView tv;

     @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    tv = (TextView) findViewById(R.id.textView1);

   for(int i=0; i < b.length;i++){





    b[i].setOnClickListener(new OnClickListener() {

    @Override
        public void onClick(View v) {

            if(butt[0].isPressed()){
        tv.setBackgroundColor(Color.BLACK);
            }


            if(b[1].isPressed()){
                tv.setBackgroundColor(Color.BLUE);
                }
            if(b[2].isPressed()){
                tv.setBackgroundColor(Color.RED);
                }

                }
               });


               }
            }

       }

1 个答案:

答案 0 :(得分:0)

您没有为Array声明Buttons。我不确定这会做什么,或者它是否会编译,但我不这么认为

Button b = {(Button)findViewById(R.id.button1), 
              (Button)findViewById(R.id.button2),
               (Button)findViewById(R.id.button3),};

将其更改为

Button[] b = {(Button)findViewById(R.id.button1), 
              (Button)findViewById(R.id.button2),
               (Button)findViewById(R.id.button3),};

此外,此代码必须在setcontentView()之后执行,否则您的NPE将存在Buttons,而您的layout仍然存在layout存在,直到你通过调用setContentView()来膨胀它。

您可以在Array之前声明onCreate(),但在向layout

充气之前无法对其进行初始化

所以你可以做这样的事情

public class MainActivity extends Activity {

  Button[] b = new Button[3];  //initialize as an array

 TextView tv;

 @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

b = {(Button)findViewById(R.id.button1), 
          (Button)findViewById(R.id.button2),
           (Button)findViewById(R.id.button3),};  //add buttons AFTER calling setContentView()
...

编辑自从@pragnani删除了他的答案后,我会稍微编辑一下这是一个好主意

您可以通过在Button

中执行以下操作,选择switch点击for loop来简化您的逻辑
b[i].setOnClickListener(new OnClickListener() {

@Override
    public void onClick(View v) {   / v is the button that was clicked

        switch (v.getId())    //so we get its id here
        {
             case (R.id.button1):
             tv.setBackgroundColor(Color.BLACK);
             break;
             case (R.id.button2):
             tv.setBackgroundColor(Color.BLUE);
             break;
             case (R.id.button3):
             tv.setBackgroundColor(Color.RED);
             break;
        }