Search code examples
androidandroid-radiogroup

Android RadioGroup click listener


I have definiation below of radiogroup with radiobuttons. How properly implement onClickListener ? I got ArrayIndexOutOfBoundsException. I don't know what is wrong.

 public void createRadioButton(Integer amount, LinearLayout layout, Integer text) {

    AppCompatTextView txt = new AppCompatTextView(activity);
    AppCompatButton btn = new AppCompatButton(activity);
    btn.setText("Click");
    txt.setText(text);
    final AppCompatRadioButton[] rb = new AppCompatRadioButton[amount];
    final RadioGroup rg = new RadioGroup(activity);

    rg.setOrientation(RadioGroup.VERTICAL);

    for( i=0; i<amount; i++){
        rb[i]  = new AppCompatRadioButton(activity);
        rg.addView(rb[i]);
        rb[i].setId(i + 100);
        rb[i].setText("Test " + i);
    }
    btn.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {

            int selectedId = rg.getCheckedRadioButtonId();
            rb[i] = (AppCompatRadioButton) activity.findViewById(selectedId);

           Toast.makeText(activity, "VALUE" rb[i].getText(), Toast.LENGTH_SHORT).show();
        }
    });
    layout.addView(txt);
    layout.addView(rg);
    layout.addView(btn);
}

Solution

  •  for( i=0; i<amount; i++){
            rb[i]  = new AppCompatRadioButton(activity);
            rg.addView(rb[i]);
            rb[i].setId(i + 100);
            rb[i].setText("Test " + i);
    
        btn.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
    
                int selectedId = rg.getCheckedRadioButtonId();
                rb[i] = (AppCompatRadioButton) activity.findViewById(selectedId);
    
               Toast.makeText(activity, "VALUE" rb[i].getText(), Toast.LENGTH_SHORT).show();
            }
        });
    }
    

    If you want to add a onclicklistener for each item that you loop over, you need to extend your for loop so it also iterates over your onclicklistener, like this.