0

我想有RadioButtoninside ListView,问题是每个RadioButton填充在ListView, 都有不同的,RadioGroup因为它们都可以选择。我只想选择一个项目并将其位置的 checkFlag 设置为 true,将其他位置设置为 false。我添加了每个RadioButton使用addView但触发java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.

这是我的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;
}

这是项目布局:

<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>

4

1 回答 1

0

因为您已经添加RadioButtonRadioGroup使用 xml,所以无需再次添加相同的按钮。评论addView行:

// holder.radioGroup.addView(holder.radioButton)

问题是 ListView 中填充的每个 RadioButton 都有不同的 RadioGroup,因为它们都可以被选中。我只想选择一个项目并将其位置的 checkFlag 设置为 true 并将其他位置设置为 false

RadioGroup使用调用clearCheck()方法取消选中所有单选按钮RadioGroup

holder.radioGroup.clearCheck();
于 2014-03-03T04:15:37.490 回答