2016-07-15 11 views
0

In meiner Anwendung habe ich 5 CheckBoxen. In der onclick-Methode habe ich folgenden Code:Android - Probleme bei der Handhabung mehrerer CheckBoxen

bt_next.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
cb_answer1.setChecked(false); 
cb_answer2.setChecked(false); 
cb_answer3.setChecked(false); 
cb_answer4.setChecked(false); 
cb_answer5.setChecked(false); 
cb_answer1.setClickable(true); 
cb_answer2.setClickable(true); 
cb_answer3.setClickable(true); 
cb_answer4.setClickable(true); 
cb_answer5.setClickable(true); 
}} 

Das funktioniert gut, aber ich wollte diesen Code verkürzen. Also habe ich ein Array mit dem CheckBox-Namen (als Klassenvariable) und ersetzt den obigen Code mit dem folgenden for-Schleife:

    for (CheckBox cb : answerCheckBoxes){ 
         cb.setChecked(false); 
         cb.setClickable(true); 
        } 

Jetzt erhalte ich eine Nullpointer -> CheckBox.setChecked (boolean) auf eine Nullobjekt-Referenz. Ich verstehe nicht, warum ich diese Ausnahme bekomme.

Was ist das Problem?

EDIT: Das ist mein Array:

CheckBox[] answerCheckBoxes = { cb_answer1, cb_answer2, cb_answer3, 
cb_answer4, cb_answer5 };. 

Wenn ich dies in meiner Onclick-Methode setze es funktioniert, aber als Klassenvariable funktioniert es nicht.

Kann mir jemand dieses Verhalten erklären?

+0

Einstellung stoppen klickbar, es sei denn, Sie sind an einem Punkt klickbare an false. Wenn die Einstellung aktiviert ist, werden die Kontrollkästchen automatisch zwischen aktiviert und deaktiviert umgeschaltet. – nukeforum

+0

Können Sie den Code anzeigen, in dem Sie das Array erstellen, und möglicherweise, wo Sie diese Kontrollkästchen instanziieren? – Arjan

+0

Das ist mein Array: CheckBox [] answerCheckBoxes = {cb_answer1, cb_answer2, cb_answer3, cb_answer4, cb_answer5}; –

Antwort

0

Sie erhalten diese Ausnahme, weil Ihr cb null ist. Ändern Sie einfach Ihren Code zu diesem:

for (CheckBox cb : answerCheckBoxes){ 
    if (cb != null) { 
     cb.setChecked(false); 
     cb.setClickable(true); 
    } 
} 
+0

Wenn der ursprüngliche Code funktioniert, ohne die NPE zu troversieren, bedeutet dies, dass die Kontrollkästchen initialisiert wurden, und das Hinzufügen der Kontrollkästchen zu einem Array und das Verwenden einer Schleife sollten ebenfalls keine NPE auslösen. Mit anderen Worten, es könnte ein Fehler bei der Erstellung dieses Arrays sein und Ihr Null-Check könnte einen Fehler verstecken, anstatt irgendetwas zu lösen. – Arjan

+0

Ja, der Null-Check löst das Problem nicht. –