private final Button[] BUTTONS = {
btn1, btn2, btn3,btn4
};
...
btn1 = (Button) this.findViewById(R.id.btn_1);
btn2 = (Button) this.findViewById(R.id.btn_2);
btn3 = (Button) this.findViewById(R.id.btn_3);
btn4 = (Button) this.findViewById(R.id.btn_4);
...
int n = BUTTONS.length;
for(int i=0; i<n; i++) {
if(DEBUG) Log.d(TAG, String.valueOf(i));
BUTTONS[i].setOnClickListener(this);
}
抛出NullPointerException,而
btn1.setOnClickListener(this);
btn2.setOnClickListener(this);
btn3.setOnClickListener(this);
btn4.setOnClickListener(this);
工作正常。对我没有任何意义。
答案 0 :(得分:3)
我认为这是因为你的Buttons数组是在btn1,...仍为null时创建的。
因此,当您在循环中调用BUTTONS [i] .setOnClickListener时,您实际上是在说null.setOnClickListener,它会产生异常。
尝试将数组设置为变量,并在分配btn1等之后进行搜索。
没有测试过,但是这样的事情可能会更好......
private ArrayList mBtns = new ArrayList();
private void initButton(int id){ button =(Button)findViewById(id); button.setOnClickListener(本); mBtns.add(按钮); }
...
initButton(R.id.btn_1); initButton(R.id.btn_2); initButton(R.id.btn_3); initButton(R.id.btn_4);
除非按钮执行非常相似的操作,否则您可能会发现更好地在布局中的每个按钮上定义onClick属性并节省大量编码(仅适用于Android 1.6及更高版本)。