Android 如何向动态创建的单选按钮添加侦听器?

Android 如何向动态创建的单选按钮添加侦听器?,android,android-listview,android-adapter,android-radiogroup,android-radiobutton,Android,Android Listview,Android Adapter,Android Radiogroup,Android Radiobutton,我有一个列表视图。每一行都有一个问题和一个带有可能答案的RadioGroup。并非所有的问题都有相同数量的答案,因此我在我的自定义列表适配器中动态添加了单选按钮。我的问题是如何将侦听器添加到这些动态创建的单选按钮中。我的代码: RadioGroup rg = (RadioGroup) convertView.findViewById(R.id.question); rg.removeAllViews(); for (String qA : question.ans

我有一个
列表视图
。每一行都有一个问题和一个带有可能答案的
RadioGroup
。并非所有的问题都有相同数量的答案,因此我在我的自定义
列表适配器中动态添加了
单选按钮
。我的问题是如何将侦听器添加到这些动态创建的
单选按钮中。我的代码:

RadioGroup rg = (RadioGroup) convertView.findViewById(R.id.question);
        rg.removeAllViews();
        for (String qA : question.answers) {
            RadioButton rb = new RadioButton(getContext());
            rb.setText(qA.toString());
            rg.addView(rb);

        }

        rg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {

            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                switch(checkedId) {
                    //WHAT SHOULD I PUT HERE?
                }
            }
        });

可能是这样的:

@Override public void onCheckedChanged(RadioGroup group, int checkedId) {
    RadioButton btn = (RadioButton)findViewById(checkedId);
}

然后是btn?:)

查找选中的按钮

View checkedButton = rg.findViewById(checkedId);
int checkedIndex = rg.indexOfChild(checkedButton);
查找选中按钮的索引

View checkedButton = rg.findViewById(checkedId);
int checkedIndex = rg.indexOfChild(checkedButton);

在执行上述操作之前,您必须将id设置为注释
rb.setId(count)
中提到的按钮。组中每个按钮的计数必须是唯一的

1首先在适配器中创建CompoundButton.OnCheckedChangeListener的全局变量,例如私有CompoundButton.OnCheckedChangeListenerlistener

2秒,在创建单选按钮时,必须将侦听器变量与单选按钮连接在一起

3第三,当您使用ui绑定数据或值时,必须调用此方法

listener = new CompoundButton.OnCheckedChangeListener() 
{
            @Override
            public void onCheckedChanged ( CompoundButton buttonView, boolean isChecked ) 
{

            }
        };

您要标识哪个动态添加的RadioButton的状态已更改。是吗?@user370305是的,你是对的。好的,在你的for单选按钮循环中,只需为每个单选按钮设置Id。根据循环计数。如
rb.setId(计数)
。我应该在循环内的单选按钮上使用setId(id)吗?最可能的情况是,
rg.setId(position);//列出getView()的项目位置。
rb.setId(计数);//对于循环计数..
现在处于
onCheckedChanged
组中。getId()
返回列表项位置,而
checkedId
返回单选按钮的位置。