0

我有一个带有 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]”中使用索引时。有人也遇到过这种情况吗?

4

2 回答 2

0

我建议你把循环放在onStart()回调里面。也许您的按钮尚未在您的代码中创建。

于 2015-05-30T16:54:54.533 回答
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);
}

使用循环中的按钮效果很好。谢谢大家。

于 2015-06-02T08:23:48.020 回答