0

对于我自己的实践,我在实例字段中创建了一个由 3 个按钮组成的数组,我希望它们都具有 setOnClickListeners,它允许每个按钮更改文本视图的背景颜色。任何人都可以指导我正确的方向。这是我的代码:

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

                }
               });


               }
            }

       }
4

1 回答 1

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删除了他的答案,我将编辑一些这是个好主意

您可以通过在您Buttonswitchfor 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;
        }
于 2013-05-06T15:54:46.497 回答