Снятие отметки с переключателя
Приложение представляет собой пошаговый секвенсор с 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();
}