I wanted to have RadioButton
inside ListView
, the problem is that every RadioButton
populated in the ListView
, has different RadioGroup
since all of them can be selected. I want only one item to be selected and set its position's checkFlag to true and other position to false. I added each RadioButton
using addView
but triggered java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
Here's my getView
:
@Override
public View getView(final int position, View convertView,
ViewGroup parent) {
View row = convertView;
holder = null;
final Option optionItem = data[position];
protected int selectedPosition = -1;
protected boolean selectedCheckFlag = false;
if (row == null) {
LayoutInflater inflater = ((Activity) context)
.getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
holder = new OptionHolder();
holder.radioGroup = (RadioGroup) row
.findViewById(R.id.radiogroup_survey);
holder.radioButton = (RadioButton) row
.findViewById(R.id.radiobutton_survey);
row.setTag(holder);
} else {
holder = (OptionHolder) row.getTag();
}
holder.radioGroup.setOrientation(RadioGroup.VERTICAL);
holder.radioButton.setText(optionItem.option);
holder.radioGroup.addView(holder.radioButton); // Triggered IllegalStateException
holder.radioGroup
.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group,
int checkedId) {
// TODO Auto-generated method stub
RadioButton selectedRadio = (RadioButton) findViewById(checkedId);
Toast.makeText(getApplicationContext(), selectedRadio.getText().toString(), Toast.LENGTH_SHORT).show();
optionItem.
selectedCheckFlag = true;
selectedPosition = position;
if (selectedPosition > -1
&& selectedCheckFlag)
optionItem.checkFlag = true;
else
optionItem.checkFlag = false;
}
});
return row;
}
Here's the item layout:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/parent_radio"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<RadioGroup
android:id="@+id/radiogroup_survey"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<RadioButton
android:id="@+id/radiobutton_survey"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:button="@drawable/selector_checkbox_red"
android:textColor="@color/brown" />
</RadioGroup>