T
Tom299
Stammgast
- 122
Hallo,
ich habe eine RadioButtonGroup erstellt, ähnlich wie man sie von Java kennt, ohne an eine View gebunden zu sein wie die RadioGroup von Android. D.h. die Radio Buttons müssen in der View/XML Layout nicht direkt zusammenliegen.
Beispiel:
Erläuterung:
Man erzeugt eine Instanz der RadioButtonGroup und fügt die gewünschten RadioButton's mit den Add-Methoden hinzu.
Die Add-Methode ohne Parameter bewirkt das gleiche wie die Add-Methode mit dem Parameter false, es wird kein checked-Flag gesetzt.
Mit dem Parameter true setzt man einen RadioButton auf true (checked).
Versucht man mehrere RadioButtons auf true zu setzen, so wird nur der 1. RadioButton gesetzt, die restlichen werden ignoriert.
Schließlich kann man mit getCheckedRadioButton() den markierten RadioButton direkt abfragen.
Verbesserungsvorschläge werden gerne entgegengenommen. Ansonsten viel Spaß damit
Gruß,
Tom
ich habe eine RadioButtonGroup erstellt, ähnlich wie man sie von Java kennt, ohne an eine View gebunden zu sein wie die RadioGroup von Android. D.h. die Radio Buttons müssen in der View/XML Layout nicht direkt zusammenliegen.
Code:
package de.codesnippet.helper;
import java.util.HashMap;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.RadioButton;
public class RadioButtonGroup implements OnCheckedChangeListener {
private HashMap<Integer, RadioButton> mapRadioButtons;
private int checkedRadioButton = 0;
private boolean isButtonChecked = false;
public RadioButtonGroup() {
mapRadioButtons = new HashMap<Integer, RadioButton>();
}
public boolean addRadioButton(RadioButton rButton) {
return addRadioButton(rButton, false);
}
public boolean addRadioButton(RadioButton rButton, boolean checked) {
if (rButton != null) {
// set listener
rButton.setOnCheckedChangeListener(this);
if (checked && !isButtonChecked) {
// if checked and no other button before was checked, set checked
rButton.setChecked(true);
isButtonChecked = true;
}
// add to hashmap
mapRadioButtons.put(rButton.getId(), rButton);
return true;
}
return false;
}
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
RadioButton radio = (RadioButton)buttonView;
if (radio != null) {
if (checkedRadioButton == 0) {
// nothing to uncheck, only store the checked button
checkedRadioButton = radio.getId();
}
else {
// unchecked the old checked button
RadioButton uncheckRadio = mapRadioButtons.get(checkedRadioButton);
uncheckRadio.setChecked(false);
// store the new checked button
checkedRadioButton = radio.getId();
}
}
}
public RadioButton getCheckedRadioButton() {
if (checkedRadioButton == 0) {
return null;
}
else {
return mapRadioButtons.get(checkedRadioButton);
}
}
}
Beispiel:
Code:
RadioButtonGroup radioButtonGroup = new RadioButtonGroup();
RadioButton btn1 = (RadioButton)findViewById(R.id.radioButton1);
RadioButton btn2 = (RadioButton)findViewById(R.id.radioButton2);
RadioButton btn3 = (RadioButton)findViewById(R.id.radioButton3);
radioButtonGroup.addRadioButton(btn1, false);
radioButtonGroup.addRadioButton(btn2, true);
radioButtonGroup.addRadioButton(btn3);
Erläuterung:
Man erzeugt eine Instanz der RadioButtonGroup und fügt die gewünschten RadioButton's mit den Add-Methoden hinzu.
Die Add-Methode ohne Parameter bewirkt das gleiche wie die Add-Methode mit dem Parameter false, es wird kein checked-Flag gesetzt.
Mit dem Parameter true setzt man einen RadioButton auf true (checked).
Versucht man mehrere RadioButtons auf true zu setzen, so wird nur der 1. RadioButton gesetzt, die restlichen werden ignoriert.
Schließlich kann man mit getCheckedRadioButton() den markierten RadioButton direkt abfragen.
Verbesserungsvorschläge werden gerne entgegengenommen. Ansonsten viel Spaß damit
Gruß,
Tom