2016-08-20 36 views
1

我有一个测验类型的应用程序,并且在每个问题上我都有一个让用户标记问题的选项。RadioGroup CheckedChangeListener错误索引

当我首先打开对话框时,一切正常,但如果我再次打开对话框导致索引增量。

例如,如果我按在指数5,结果指数是5,然后如果我再次打开对话框,按指数5再次结果是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(); 

它工作第一次,但如果我再试一次,我总会得到一个ArrayIndexOutOfBoundsException

回答

2

我想你混淆在RadioGroup.OnCheckedChangeListener 的PARAMS它想onCheckedChanged(RadioGroup group, int checkedId),你在你的代码混淆checkedId为指标i以上。

您可以检查checkedId像下面

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

感谢我今天学到了新的东西:),我认为我是指数,而不是ID非常感谢 –

+0

:)欢迎您,谢谢为了投票 –

0

我能解决我的问题,这是不漂亮,但它的作品,我仍然不明白为什么该指数
自动递增的听众

当用户点击发送,我运行这个检查

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

您的错误是OnCheckedChange方法传递视图的id,而不是索引。您必须更改代码以使用SparseIntArray而不是数组,并将每个值设置为其id,而不是index。否则,您可以使用indexOfChild函数。