Снятие отметки с переключателя

Приложение представляет собой пошаговый секвенсор с 16 радиогруппами по 8 кнопок в каждой группе. Он работает отлично, за исключением того, что когда в группе выбрана кнопка, я не могу ее отключить, если не использую созданную мной кнопку очистки, чтобы очистить все радиогруппы. Что я хотел бы добавить, так это некоторый код, который говорит, что когда выбранный переключатель снова выбран, он просто выключается, как тумблер. Я попытался использовать переключатели, но затем возникли другие проблемы с этим методом. Ниже приведена попытка, но это далеко от цели, я думаю,

final RadioGroup radioGroup1 = (RadioGroup)findViewById(R.id.RadioGroup1);
RadioButton lC1 = (RadioButton)findViewById(R.id.RadioButtonlowC1);

Button D1 = (Button)findViewById(R.id.RadioButtonD1);
        D1.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                PdBase.sendFloat("D1", 74);
                int selectedTypeId = radioGroup1.getCheckedRadioButtonId();
                RadioButton D1 = (RadioButton) findViewById(selectedTypeId);
                if(radioGroup1 != null) // This will be null if none of the radio buttons are selected
                       radioGroup1.clearCheck(); 
                PdBase.sendFloat("D1", 0);
            }
        });

3 ответа

Пожалуйста, смотрите мой ответ на ваш другой в основном идентичный вопрос, который я скопировал ниже...:)

Недавно у меня возникла такая же потребность - создать радиогруппу, в которой выбранный элемент можно отменить, нажав его снова. Я обнаружил, что не могу добиться этого с помощью слушателей, но я смог сделать это с помощью пользовательского RadioButton, вот так...

public class ToggleableRadioButton extends RadioButton {
    // Implement necessary constructors

    @Override
    public void toggle() {
        if(isChecked()) {
            if(getParent() instanceof RadioGroup) {
                ((RadioGroup)getParent()).clearCheck();
            }
        } else {
            setChecked(true);
        }
    }
}

Обратите внимание, что кнопка переключается по-разному в зависимости от ее текущего состояния - т.е. setChecked(true) на баттоне против колла clearCheck() на группу. Если setChecked() используется в обоих случаях, кнопка, которая была только что отменена, не может быть немедленно повторно выбрана - логика в RadioGroup предотвращает это.

Чтобы использовать эту кнопку, просто замените <RadioButton> теги с <your.package.ToggleableRadioButton> в вашем макете XML.

Вам нужно поместить кнопку в группу радиостанций, затем очистить группу. Радиокнопка не может быть отключена напрямую, потому что идея в том, что один параметр в группе всегда отмечен.

Вот пример того, как создать radiogroup, radiobutton и как использовать в коде Java. Надеюсь, что это даст вам полную картину

XML-файл:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >


    <RadioGroup
        android:id="@+id/maptype"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/line1"
        android:orientation="horizontal" >

        <RadioButton
            android:id="@+id/map"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:checked="true"
            android:drawableRight="@drawable/ic_launcher"/>

        <RadioButton
            android:id="@+id/satellite"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:drawableRight="@drawable/ic_launcher"/>
    </RadioGroup>

</LinearLayout>

В коде Java

public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    RadioGroup rgrpMapType = (RadioGroup) findViewById(R.id.maptype);
    int selectedTypeId = rgrpMapType.getCheckedRadioButtonId();
    RadioButton rbMapType = (RadioButton) findViewById(selectedTypeId);
    if(rbMapType != null) // This will be null if none of the radio buttons are selected
           rgrpMapType.clearCheck(); 
}
Другие вопросы по тегам