2016-08-20 4 views
1

Ich habe eine Quiz-App und bei jeder Frage habe ich eine Option, mit der der Benutzer die Frage markieren kann.RadioGroup CheckedChangeListener falscher Index

Wenn ich den Dialog zuerst öffne funktioniert alles, aber wenn ich den Dialog wieder öffne, verursacht das Indexinkrement.

Zum Beispiel, wenn ich bei Index 5 drücken, Ergebnis Index 5 ist und dann, wenn ich den Dialog wieder öffnen, und drücken Sie den Index 5 wieder das Ergebnis ist 10.

Dialog alert = new Dialog(this); 
    alert.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT)); 
    alert.setContentView(R.layout.dialog_layout); 

    RadioGroup mRadioGroup = (RadioGroup) alert.findViewById(R.id.dialog_radioGroup); 
    final String[] options = { 
      ((RadioButton)mRadioGroup.getChildAt(0)).getText().toString(), 
      ((RadioButton)mRadioGroup.getChildAt(1)).getText().toString(), 
      ((RadioButton)mRadioGroup.getChildAt(2)).getText().toString(), 
      ((RadioButton)mRadioGroup.getChildAt(3)).getText().toString(), 
      ((RadioButton)mRadioGroup.getChildAt(4)).getText().toString(), 
    }; 

    mRadioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { 
     @Override 
     public void onCheckedChanged(RadioGroup radioGroup, int i) { 
      sendToServer = options[i]; 
     } 
    }); 
    alert.show(); 

Es ersten Mal funktioniert, aber Wenn ich es erneut versuche, bekomme ich immer eine ArrayIndexOutOfBoundsException.

Antwort

2

Ich glaube, Sie die params verwirren in RadioGroup.OnCheckedChangeListener Es zu onCheckedChanged(RadioGroup group, int checkedId) nehme an, wo Sie die checkedId als Index i im Code oben verwechseln.

können Sie überprüfen die checkedId wie unten

mRadioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { 
      @Override 
      public void onCheckedChanged(RadioGroup group, int checkedId) { 
       for (int i = 0; i < group.getChildCount(); i++) { 
        if (group.getChildAt(i).getId() == checkedId) { 
         sendToServer = options[i]; 
         break; 
        } 
       } 
      } 
     }); 
+0

Dank lernte ich eine neue Sache heute :), dachte ich, dass der i war der Index und nicht die id vielen Dank –

+0

:) Sie willkommen sind, danken für die Abstimmung –

0

konnte ich mein Problem beheben es nicht schön ist, aber es funktioniert immer noch nicht verstehe ich, warum der Index
automatische Erhöhung auf dem Hörer ist

, wenn der Benutzer klickt senden, ich diese Prüfung durchführen

if(((RadioButton) mRadioGroup.getChildAt(0)).isChecked()){ 
    index = 0; 
}else if(((RadioButton) mRadioGroup.getChildAt(1)).isChecked()){ 
    index = 1; 
}else if(((RadioButton) mRadioGroup.getChildAt(2)).isChecked()){ 
    index = 2; 
}else if(((RadioButton) mRadioGroup.getChildAt(3)).isChecked()){ 
    index = 3; 
} 
0

Ihr Fehler ist, dass die OnCheckedChange-Methode die ID der Ansicht übergibt, nicht den Index. Sie müssen Ihren Code ändern, um ein SparseIntArray anstelle eines Arrays zu verwenden, und jeden Wert auf seine ID setzen, nicht auf den Index. Oder Sie können mit der Funktion indexOfChild arbeiten.

Verwandte Themen