| |||||||
Das Thema "RadioButtonGroup" befindet sich unter Android Codeschnipsel auf Android-Hilfe.de.
|
| | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| Fortgeschrittenes Mitglied Modell: HTC Sensation Registriert seit: 31.08.2011
Beiträge: 390
Abgegebene Danke: 25
Erhielt 59 Danke für 57 Beiträge
| 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);
}
}
} 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); 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 |
| | |
| | #2 (permalink) |
| Neuer Benutzer Modell: HTC Sensation XE Registriert seit: 11.12.2011
Beiträge: 13
Abgegebene Danke: 2
Erhielt 1 Danke für 1 Beitrag
| Code: RadioButtonGroup radioButtonGroup = new RadioButtonGroup(); Code: radioButtonGroup.addRadioButton(btn1, false); Code: ((Object) radioButtonGroup).addRadioButton(btn1, false); . Die angebotene Lösung sagt change method receiver cast. Wenn ich darauf klicke wird (object) makiert. Was soll da rein?
|
| | |
| | #3 (permalink) |
| Fortgeschrittenes Mitglied Modell: HTC Sensation Registriert seit: 31.08.2011
Beiträge: 390
Abgegebene Danke: 25
Erhielt 59 Danke für 57 Beiträge
|
du mußt meine klasse importieren, damit er sie kennt. kannst sie auch in dein eigenes package übernehmen.
|
| | |
| | #4 (permalink) |
| Neuer Benutzer Modell: HTC Sensation XE Registriert seit: 11.12.2011
Beiträge: 13
Abgegebene Danke: 2
Erhielt 1 Danke für 1 Beitrag
|
Hä? Soll der erste Code in eine eigene Datei (Klasse)? Denn bei Code: public class RadioButtonGroup implements OnCheckedChangeListener { |
| | |
| | #6 (permalink) |
| Neuer Benutzer Modell: HTC Sensation XE Registriert seit: 11.12.2011
Beiträge: 13
Abgegebene Danke: 2
Erhielt 1 Danke für 1 Beitrag
|
Lässt sich jetzt zwar alles kompilieren aber es funtzt nicht: Wenn ich auf beide RadioButtons klicke werden beide aktiviert |
| | |
| | #7 (permalink) | |
| Android Guru Registriert seit: 09.05.2009
Beiträge: 2.389
Abgegebene Danke: 36
Erhielt 307 Danke für 289 Beiträge
| Zitat:
irgendeinen code kopieren, wird deinen java Kenntnissen nicht grad weiterhelfen.
__________________ App Entwicklung Latest apps: Media Streamer BETA | DailyCash | MoneyManager ( PRO | HD ) | |
| | |
| | #9 (permalink) |
| Fortgeschrittenes Mitglied Modell: HTC Sensation Registriert seit: 31.08.2011
Beiträge: 390
Abgegebene Danke: 25
Erhielt 59 Danke für 57 Beiträge
|
also bei mir funktionierts einwandfrei, nutze es selbst in meinen projekten ... du hast auch nicht die adds vergessen?
|
| | |
| | #10 (permalink) |
| Neuer Benutzer Modell: HTC Sensation XE Registriert seit: 11.12.2011
Beiträge: 13
Abgegebene Danke: 2
Erhielt 1 Danke für 1 Beitrag
|
Meine Starter Klassse sieht so aus: Code: package de.javatest.radiobuttons;
import android.app.Activity;
import android.os.Bundle;
import java.util.HashMap;
import android.widget.RadioGroup;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.RadioButton;
public class Starter extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//RadioButtons
RadioButtonGroup radioButtonGroup = new RadioButtonGroup();
RadioButton ja1 = (RadioButton)findViewById(R.id.ja1);
RadioButton nein1 = (RadioButton)findViewById(R.id.nein1);
radioButtonGroup.addRadioButton(ja1, true);
radioButtonGroup.addRadioButton(nein1, false);
}
} |
| | |
![]() |
|
| Themen-Optionen | |
| Ansicht | |
| |