向单选按钮组添加自定义视图和单选按钮

4

我是一位有用的助手,可以为您进行翻译。

我有一个自定义视图,其中包含一个单选按钮和其他视图。

这个SingleRadioItem:

public class SingleRadioItem extends LinearLayout {
    private TextView mTextKey;
    private RadioButton mRadioButton;
    private ImageView mImageSeparator;

    public SingleRadioItem(Context context, AttributeSet attrs) {
        super(context, attrs);
        View view = LayoutInflater.from(context).inflate(R.layout.rtl_single_radio_item, this, true);

        mTextKey = (TextView)view.findViewById(R.id.single_radio_item_text_key);
        mRadioButton = (RadioButton)view.findViewById(R.id.single_radio_item_button);
        mImageSeparator = (ImageView)view.findViewById(R.id.single_image_separator);
    }

    public void setKey(String key) {
        mTextKey.setText(key);
    }

    public boolean getSelectedState() {
        return mRadioButton.isSelected();
    }

    public void setSelectedState(boolean selected) {
        mRadioButton.setSelected(selected);
    }
}

我想创建此视图的多个实例,将它们添加到一个RadioGroup中,并将RadioGroup添加到一个LinearLayout中。但是当我这样做时,它允许我将所有单选按钮都设置为选中状态,这意味着RadioGroup没有正常工作(可能是因为我的处理方式不正确)。
RadioGroup radioGroup = new RadioGroup(this);
        radioGroup.setOrientation(RadioGroup.VERTICAL);

        SingleRadioItem radio1 = new SingleRadioItem(this, null);
        SingleRadioItem radio2 = new SingleRadioItem(this, null);

        radioGroup.addView(radio1);
        radioGroup.addView(radio2);

        updateDetailsView.addView(radioGroup);

显然,当我添加 RadioButton radio1 = new RadioButton(this); 时,RadioGroup 工作正常。
我是否可以将包含单选按钮的视图添加到 Radiogroup 中,我是否遗漏了某些东西或根本不可能?
谢谢!
解决方案: 为了扩展 @cosmincalistru 的答案并帮助其他人:
对于每个添加到 LinearLayout 中的 SingleRadioItem,我都像这样附加了一个监听器:
radio1.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {

                if (lastRadioChecked != null) {
                    lastRadioChecked.setCheckedState(false);
                }

                lastRadioChecked = (SingleRadioItem)v;
                lastRadioChecked.setCheckedState(true);
            }
        });

你还需要将SingleRadioItem XML中的RadioButton View设置为clickable:false。
2个回答

3

单选按钮必须直接隶属于RadioGroup,否则你的按钮将被视为来自不同的组。 在你的情况下,最好的方法是在每个RadioButton上使用监听器。

编辑: 每当我想将一组RadioButtons作为一组的一部分,但无法使用RadioGroup时,我会做类似于这样的事情:

RadioButton r1,r2,....;
// Instantiate all your buttons;
...
// Set listener on each
for(each RadioButton) {
    rx.setOnCheckedChangeListener(OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if (isChecked) {
                //set all buttons to false;
                for(each RadioButton) {
                    rx.setChecked(false);
                }
                //set new selected button to true;
                buttonView.setChecked(true);
            }
        }
    });
}

0

当您将视图添加到RadioGroup时,仅当该视图是RadioButton的一个实例时,组才能正常工作。在您的情况下,您正在添加一个LinearLayout。因此,SingleRadioItem应扩展RadioButton。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接