radiogroup的android OnCheckedChange
我正在android中编写一个radiogroup的android OnCheckedChange,android,radio-button,radio-group,Android,Radio Button,Radio Group,我正在android中编写一个活动,其中一个组下有两个单选按钮。默认情况下会选中其中一个。但是我不能在onCreate方法中触发事件,以便在该方法中执行某些操作。单击时,onCheckedChanged运行正常 RadioGroup ItemtypeGroup = (RadioGroup) findViewById(R.id.rechargeItemtype); RadioButton providerRadio = (RadioButton) findViewById(R.id.a);
活动
,其中一个组下有两个单选按钮。默认情况下会选中其中一个。但是我不能在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
}
}
});
要在初始化时触发默认设置的无线电复选框。使用clearCheck方法将所有内容设置为unchecked,然后设置处理程序,然后设置默认值,处理程序将启动
itemtypeGroup.clearCheck();
rb = (RadioButton) view.findViewById(R.id.a);
rb.setChecked(true);
然后像往常一样添加一个侦听器
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.clearCheck();
rb = (RadioButton) view.findViewById(R.id.a);
rb.setChecked(true);
祝你好运
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
}
}
});
这是我的工作。希望是有帮助的问题在于,您正在设置
OnCheckedChangeListener
上的放射组
在提供程序Radio.performClick()之后
方法调用这就是为什么当
providerRadio.performClick()时代码>方法执行,直到它们的调用不可用。因此,要使其工作,您需要在调用performClick()
方法之前设置侦听器。
您应该使用RadioButton.performClick()
方法来更改当前选中的RadioButton
,而不是使用RadioButton.performClick()
因此,您可以使用此代码更改放射组的当前选择
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);
注意:-
确保调用
方法,然后在代码片段中添加一次checkedChangeListener
。我猜您是在将listener设置为组之前执行单击,这就是事件未触发的原因。尝试此代码
在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;
}
}
}
});
希望这能有所帮助。即使没有问题,我还是希望从XML布局定义文件中获取默认值,而不是在代码中设置它
这就是为什么我使用这种方法来:
存储无线组中的默认值
结清所有支票
在CheckedChangeListener上初始化
再次检查触发侦听器的默认值(先前存储)
如果将first_单选按钮
作为默认单选按钮,则代码中可能会出现这种情况:
// 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>
// ...
设置侦听器后,请尝试放置性能单击()
代码,谢谢您的评论,但运气不好:(嗯……你有没有在你的监听器中设置一个断点,以确保它没有进入那里,并且里面的其他东西没有把它搞砸?编辑。当我点击收音机时,我可以在logcat中看到效果。这个“rb=(RadioButton)视图是什么。findViewById(R.id.a);”意思是?我们必须在onCheckedChanged中声明吗?三个步骤。全部清除,连接处理程序,设置默认值。因为默认值是在侦听器连接后设置的,所以侦听器代码将运行。我为向下投票感到抱歉-这是无意的。我试图通过单击向上投票来更正它,但我无法。如果您知道更正向下投票的方法,请让我知道。NP别担心。@Jorvis For three groups+我可能会在checkedID上使用switch语句。计划所有checkedID在应用程序中都是唯一的。我可能会使用单独的处理程序,具体取决于应用程序。假设我有三个广播组,那么我将如何处理其中三个广播组的侦听器?你是说我应该实现三个广播组不同的侦听器以及三个无线电组的三个onCheckedChanged方法。否。您必须使用一个侦听器并检查在侦听器中选择的侦听器。