我正在android中编写Activity
,我在RadioGroup下有两个单选按钮。默认情况下会检查其中一个。但我无法在onCreate
方法中触发事件,以便我可以做一些事情。点击后onCheckedChanged
运行正常。
RadioGroup ItemtypeGroup = (RadioGroup) findViewById(R.id.rechargeItemtype);
RadioButton providerRadio = (RadioButton) findViewById(R.id.a);
providerRadio.performClick();
ItemtypeGroup.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged (RadioGroup group,int checkedId){
Log.d("chk", "id" + checkedId);
if (checkedId == R.id.a) {
//some code
} else if (checkedId == R.id.b) {
//some code
}
}
});
答案 0 :(得分:40)
在初始化时触发默认的无线电复选框。使用clearCheck方法将所有内容设置为未选中,然后设置处理程序,然后设置默认值并触发处理程序。
itemtypeGroup.clearCheck();
然后像往常一样添加一个听众...
itemtypeGroup
.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
Log.d("chk", "id" + checkedId);
if (checkedId == R.id.a) {
//some code
} else if (checkedId == R.id.b) {
//some code
}
}
});
然后检查默认的单选按钮,你的听众将会开火。
rb = (RadioButton) view.findViewById(R.id.a);
rb.setChecked(true);
祝你好运
答案 1 :(得分:8)
radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
if (checkedId == R.id.radioButton1) {
//do work when radioButton1 is active
} else if (checkedId == R.id.radioButton2) {
//do work when radioButton2 is active
} else if (checkedId == R.id.radioButton3) {
//do work when radioButton3 is active
}
}
});
这项工作对我而言。希望是有帮助的
答案 2 :(得分:4)
试试此代码。
在onCreate方法中声明此代码。
RadioGroup radioGroup = (RadioGroup) findViewById(R.id.radiogroup);
radioGroup.clearCheck();
radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
RadioButton rb = (RadioButton) group.findViewById(checkedId);
if (null != rb && checkedId > -1) {
// checkedId is the RadioButton selected
switch (checkedId) {
case R.id.one:
// Do Something
break;
case R.id.two:
// Do Something
break;
case R.id.three:
// Do Something
break;
}
}
}
});
希望这有帮助。
答案 3 :(得分:3)
问题是因为您在 OnCheckedChangeListener
之后 RadioGroup
providerRadio.performClick();
方法调用。
这就是为什么当providerRadio.performClick();
方法执行到那时它们没有OnCheckedChangeListener
可以调用的原因。因此,为了使其工作,您需要在调用performClick()
方法之前设置监听器
而不是使用RadioButton.performClick()
,您应该使用RadioGroup.check()
方法更改当前选中的RadioButton
。
因此,您可以使用此代码更改RadioGroup的当前选择
RadioGroup ItemtypeGroup = (RadioGroup) findViewById(R.id.rechargeItemtype);
ItemtypeGroup
.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
Log.d("chk", "id" + checkedId);
if (checkedId == R.id.a) {
//some code
} else if (checkedId == R.id.b) {
//some code
}
}
});
ItemtypeGroup.check(R.id.a);
注意强>: -
请务必在代码段中添加 RadioGroup.check()
后调用 OnCheckedChangeListener
方法。
答案 4 :(得分:0)
我猜你在将听众设置为群组之前正在执行点击,这就是未触发事件的原因。
答案 5 :(得分:0)
即使@dannys answer可以,我还是要从 XML 布局定义文件中获取默认值,而不是在代码中进行设置。
这就是为什么我使用这种方法:
OnCheckedChangeListener
使用first_radio_button
作为默认单选按钮的代码,代码看起来像这样:
// call this in any init method
_myRadioGroup = _myViewContainingTheRadioGroup.findViewById(R.id.my_radio_group);
int defaultValue = _myRadioGroup.getCheckedRadioButtonId();
_myRadioGroup.clearCheck();
_myRadioGroup.setOnCheckedChangeListener(_myRadioGroupCheckedChangeListener);
_myRadioGroup.check(defaultValue);
将OnCheckedChangeListener
放在班上的某个地方:
private RadioGroup.OnCheckedChangeListener _myRadioGroupCheckedChangeListener = new RadioGroup.OnCheckedChangeListener()
{
@Override
public void onCheckedChanged(RadioGroup group, int checkedId)
{
switch(group.findViewById(checkedId).getId())
{
case R.id.first_radio_button:
// do stuff
break;
case R.id.second_radio_button:
// do stuff
break;
// ...
}
}
};
这是我的广播组xml
<RadioGroup
android:id="@+id/my_radio_group"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<RadioButton
android:id="@+id/first_radio_button"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:checked="true"
android:text="@string/first_radio_button_text"/>
<RadioButton
android:id="@+id/second_radio_button"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:text="@string/second_radio_button_text"/>
// ...
</RadioGroup>