如果已在 RadioGroup 中选中,如何取消选中 RadioButton
How to uncheck RadioButton if already checked in RadioGroup
我在 RadioGroup 中有两个 RadioButton,最初都未选中。如果已经选中,我想取消选中 RadioButton。我试过了,但我做不到。当我选择任何单选按钮时,它不会将状态更改为第一次检查,如果我第二次 select 同一个单选按钮然后它正在改变它的状态,如果我 select 另一个单选按钮如果一个按钮选中然后它也没有第一次更改状态并且所有按钮都未选中任何人都可以帮助我吗?我的代码如下...
radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, @IdRes int checkedId) {
RadioButton checkedRadioButton = (RadioButton)group.findViewById(checkedId);
pus="";
boolean isChecked = checkedRadioButton.isChecked();
if(isChecked){
checkedRadioButton.setChecked(false);
}else{
checkedRadioButton.setChecked(true);
}
}
Toast.makeText(context, pus, Toast.LENGTH_SHORT).show();
}
});
<RadioGroup
android:id="@+id/rdbt_group"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="5dp"
android:gravity="center"
android:orientation="horizontal" >
<RadioButton
android:id="@+id/radio_no"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@drawable/rbtn_selector"
android:button="@null"
android:gravity="center"
android:paddingBottom="5dp"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:paddingTop="5dp"
android:clickable="true"
android:textColor="@drawable/rbtn_textcolor_selector"
android:textSize="15sp" />
<RadioButton
android:id="@+id/radio_yes"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:button="@null"
android:clickable="true"
android:textSize="15sp"
android:background="@drawable/rbtn_selector"
android:textColor="@drawable/rbtn_textcolor_selector"
android:padding="5dp"
android:gravity="center"
/>
</RadioGroup>
您不能 "uncheck" 单选按钮。但是你可以清除一个RadioGroup
using clearCheck
.
RadioGroup 用于选择两个选项之一,您不应干扰视图的正常行为。用户强制从两个选项中选择一个。将性别视为无线电组,可能有两个或三个选项,您必须强制选择其中一个。这可以通过简单地在 xml
中添加以下代码来实现
<RadioGroup
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginLeft="16dp"
android:layout_marginTop="16dp"
app:layout_constraintLeft_toLeftOf="parent">
<RadioButton
android:id="@+id/radioButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="RadioButton"
tools:layout_editor_absoluteX="126dp"
tools:layout_editor_absoluteY="83dp"/>
<RadioButton
android:id="@+id/radioButton2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="RadioButton"
tools:layout_editor_absoluteX="172dp"
tools:layout_editor_absoluteY="127dp"/>
</RadioGroup>
并在 activity class
radioGroup.setOnCheckedChangeListener(new OnCheckedChangeListener()
{
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
// checkedId is the RadioButton selected
// you can check if radiobutton is checked or unchecked here , do needful codes
}
});
我只有一个单选按钮,我真的不想做一个单选按钮组。 onClick 以及 if 和 else 检查无法手动检查和取消选中它。我读了一些关于 onRadioButtonClick 监听器的帖子
首先我尝试切换到复选框-> 同样的问题。然后我尝试了 CheckedTextView,你知道吗,它实际上就像一个开关。所以基本上我添加了一个单选按钮然后将文本留空,在它旁边添加了 checkedTextView(重叠)然后将 checkedTextView 的 onClick 函数链接到切换函数 ->
public void toggle(View view)
{
if(checkedTextView.isChecked())
{
checkedTextView.setChecked(false);
actualRadioBtn.setChecked(false);
}
else
{
checkedTextView.setChecked(true);
actualRadioBtn.setChecked(true);
}
}
然后在检查单选按钮是否被选中的函数中,您可以简单地使用
if(actualRadioBtn.isChecked())....
我知道现在回答这个问题有点晚了,但如果它能帮助到其他人,我会很高兴。
只需自定义 class 扩展 RadioButton
或 AppCompatRadioButton
并覆盖 toggle()
方法。
public class UncheckableRadioButton extends AppCompatRadioButton {
public UncheckableRadioButton(Context context) {
super(context);
}
public UncheckableRadioButton(Context context, AttributeSet attrs) {
super(context, attrs);
}
public UncheckableRadioButton(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
public void toggle() {
if (isChecked()) {
if (getParent() != null && getParent() instanceof RadioGroup) {
((RadioGroup) getParent()).clearCheck();
}
} else {
super.toggle();
}
}
@Override
public CharSequence getAccessibilityClassName() {
return UncheckableRadioButton.class.getName();
}
}
如果您选中 radioGroup.getCheckedRadioButtonId()
,这也将有效。
我建议您改用 CheckBox。希望对你有帮助
我在 RadioGroup 中有两个 RadioButton,最初都未选中。如果已经选中,我想取消选中 RadioButton。我试过了,但我做不到。当我选择任何单选按钮时,它不会将状态更改为第一次检查,如果我第二次 select 同一个单选按钮然后它正在改变它的状态,如果我 select 另一个单选按钮如果一个按钮选中然后它也没有第一次更改状态并且所有按钮都未选中任何人都可以帮助我吗?我的代码如下...
radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, @IdRes int checkedId) {
RadioButton checkedRadioButton = (RadioButton)group.findViewById(checkedId);
pus="";
boolean isChecked = checkedRadioButton.isChecked();
if(isChecked){
checkedRadioButton.setChecked(false);
}else{
checkedRadioButton.setChecked(true);
}
}
Toast.makeText(context, pus, Toast.LENGTH_SHORT).show();
}
});
<RadioGroup
android:id="@+id/rdbt_group"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="5dp"
android:gravity="center"
android:orientation="horizontal" >
<RadioButton
android:id="@+id/radio_no"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@drawable/rbtn_selector"
android:button="@null"
android:gravity="center"
android:paddingBottom="5dp"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:paddingTop="5dp"
android:clickable="true"
android:textColor="@drawable/rbtn_textcolor_selector"
android:textSize="15sp" />
<RadioButton
android:id="@+id/radio_yes"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:button="@null"
android:clickable="true"
android:textSize="15sp"
android:background="@drawable/rbtn_selector"
android:textColor="@drawable/rbtn_textcolor_selector"
android:padding="5dp"
android:gravity="center"
/>
</RadioGroup>
您不能 "uncheck" 单选按钮。但是你可以清除一个RadioGroup
using clearCheck
.
RadioGroup 用于选择两个选项之一,您不应干扰视图的正常行为。用户强制从两个选项中选择一个。将性别视为无线电组,可能有两个或三个选项,您必须强制选择其中一个。这可以通过简单地在 xml
中添加以下代码来实现<RadioGroup
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginLeft="16dp"
android:layout_marginTop="16dp"
app:layout_constraintLeft_toLeftOf="parent">
<RadioButton
android:id="@+id/radioButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="RadioButton"
tools:layout_editor_absoluteX="126dp"
tools:layout_editor_absoluteY="83dp"/>
<RadioButton
android:id="@+id/radioButton2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="RadioButton"
tools:layout_editor_absoluteX="172dp"
tools:layout_editor_absoluteY="127dp"/>
</RadioGroup>
并在 activity class
radioGroup.setOnCheckedChangeListener(new OnCheckedChangeListener()
{
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
// checkedId is the RadioButton selected
// you can check if radiobutton is checked or unchecked here , do needful codes
}
});
我只有一个单选按钮,我真的不想做一个单选按钮组。 onClick 以及 if 和 else 检查无法手动检查和取消选中它。我读了一些关于 onRadioButtonClick 监听器的帖子
首先我尝试切换到复选框-> 同样的问题。然后我尝试了 CheckedTextView,你知道吗,它实际上就像一个开关。所以基本上我添加了一个单选按钮然后将文本留空,在它旁边添加了 checkedTextView(重叠)然后将 checkedTextView 的 onClick 函数链接到切换函数 ->
public void toggle(View view)
{
if(checkedTextView.isChecked())
{
checkedTextView.setChecked(false);
actualRadioBtn.setChecked(false);
}
else
{
checkedTextView.setChecked(true);
actualRadioBtn.setChecked(true);
}
}
然后在检查单选按钮是否被选中的函数中,您可以简单地使用
if(actualRadioBtn.isChecked())....
我知道现在回答这个问题有点晚了,但如果它能帮助到其他人,我会很高兴。
只需自定义 class 扩展 RadioButton
或 AppCompatRadioButton
并覆盖 toggle()
方法。
public class UncheckableRadioButton extends AppCompatRadioButton {
public UncheckableRadioButton(Context context) {
super(context);
}
public UncheckableRadioButton(Context context, AttributeSet attrs) {
super(context, attrs);
}
public UncheckableRadioButton(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
public void toggle() {
if (isChecked()) {
if (getParent() != null && getParent() instanceof RadioGroup) {
((RadioGroup) getParent()).clearCheck();
}
} else {
super.toggle();
}
}
@Override
public CharSequence getAccessibilityClassName() {
return UncheckableRadioButton.class.getName();
}
}
如果您选中 radioGroup.getCheckedRadioButtonId()
,这也将有效。
我建议您改用 CheckBox。希望对你有帮助