2010-11-25 3 views
0
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); 
} 

lancers francs NullPointerException, alors quesetOnClickListener renvoie uniquement NullPointerException à l'intérieur de la boucle. Pourquoi?

btn1.setOnClickListener(this); 
btn2.setOnClickListener(this); 
btn3.setOnClickListener(this); 
btn4.setOnClickListener(this); 

fonctionne très bien. Cela n'a aucun sens pour moi.

+0

Vous avez utilisé btn1 quatre fois. Peut-être que btn2, 3 ou 4 n'existe pas (c'est-à-dire que findViewById renvoie null)? Btw, pourquoi commencez-vous à 1? Pourquoi pas 0? – EboMike

+0

Désolé, j'expérimentais. J'ai corrigé le code maintenant. –

Répondre

3

Je pense que c'est parce que votre tableau de boutons est créé quand btn1, ... est toujours nul. Lorsque vous appelez BUTTONS [i] .setOnClickListener dans la boucle, vous dites en fait null.setOnClickListener qui donnera une exception.

Essayez la mise en place du tableau comme une variable et Sey après que vous avez attribué btn1, etc.

ai pas testé, mais quelque chose comme ça pourrait fonctionner mieux ...

private ArrayList mBtns = new ArrayList();

private void initButton (int id) { button = (Bouton) findViewById (id); button.setOnClickListener (this); mBtns.add (bouton); }

...

initButton (R.id.btn_1); initButton (R.id.btn_2); initButton (R.id.btn_3); initButton (R.id.btn_4); De même, à moins que les boutons ne fassent des choses très similaires, il est préférable de définir simplement l'attribut onClick sur chacun des modèles et de vous épargner BEAUCOUP de codage (uniquement disponible sur Android 1.6 et versions ultérieures).

+0

Exactement, merci @xtempore –

Questions connexes