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
返回单选按钮的位置。