对于我自己的练习,我是在实例字段中创建一个包含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);
}
}
});
}
}
}
答案 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;
}