我有一个带有12个按钮的网格,我想要为这个按钮设置动画。我把它们放在一个向量中,当我打算执行“.startAnimation”时,我总是有“NullPointer”异常,我不知道为什么。
我有这个:
final private int tamGrid=12;
private Button[] botones = new Button[tamGrid];
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_juego_grid12);
loopAnimation=AnimationUtils.loadAnimation(this, R.anim.animacionbotongrid12);
//Asociamos los elementos de la vista:
asociateElements();
}
public void asociateElements(){
String buttonID;
int resID;
for(int i=0; i<tamGrid; i++) {
buttonID="boton"+Integer.toString(i);
resID = getResources().getIdentifier(buttonID, "id","butterflydevs.brainstudio");
buttons[i]=(Button)findViewById(resID);
buttons[i].startAnimation(loopAnimation);
}
}
为什么不这样做?错误是
Caused by: java.lang.NullPointerException
在startAnimation中。
我注意到当我尝试这种情况时也会发生这种情况:
botones[0].setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
//Acciones del botón:
botones[0].setBackgroundColor(Color.RED);
}
}
);
当我在“botones [n]”中使用索引时。 这也发生在任何人身上?
答案 0 :(得分:0)
我建议您将循环放在onStart()
回调中。也许您的代码中尚未创建按钮。
答案 1 :(得分:0)
我自己发现了问题,一个按钮被命名为错误,因此当我通过向量时,这会导致空指针异常。
for(int i=0; i<gridSize; i++)
buttons[i].startAnimation(animation);
for(int i=0; i<gridSize; i++) {
buttonID="button"+Integer.toString(i);
resID = getResources().getIdentifier(buttonID, "id","package.name");
buttons[i]=(Button)findViewById(resID);
}
使用循环中的按钮可以很好地工作。谢谢大家。