Jetzt kostenlos registrieren. Mitglieder surfen ohne Werbung auf Android-Hilfe.de!
Zurück   Android-Hilfe.de > Android Developer > Android Codeschnipsel

RadioButtonGroup

Das Thema "RadioButtonGroup" befindet sich unter Android Codeschnipsel auf Android-Hilfe.de.


Antwort

 

Themen-Optionen Ansicht
Alt 09.11.2011, 08:46   #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
Beitrag RadioButtonGroup

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.

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
Tom299 ist offline   Mit Zitat antworten
Alt 11.12.2011, 19:53   #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
Standard AW: RadioButtonGroup

Code:
RadioButtonGroup radioButtonGroup = new RadioButtonGroup();
RadioButtonGroup wird bei mir rot unterstrichen und als Lösung wird das ändern zu RadioGroup angeboten. Wenn ich das mache wird
Code:
radioButtonGroup.addRadioButton(btn1, false);
auch noch rot unterstrichen, wenn ich die einzige Lösung anklicke wird daraus
Code:
((Object) radioButtonGroup).addRadioButton(btn1, false);
und addRadioButton wird rot unterstrichen . Die angebotene Lösung sagt change method receiver cast. Wenn ich darauf klicke wird (object) makiert. Was soll da rein?
java_noob ist offline   Mit Zitat antworten
Alt 12.12.2011, 07:13   #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
Standard AW: RadioButtonGroup

du mußt meine klasse importieren, damit er sie kennt. kannst sie auch in dein eigenes package übernehmen.
Tom299 ist offline   Mit Zitat antworten
Alt 12.12.2011, 14:51   #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
Standard AW: RadioButtonGroup

Hä? Soll der erste Code in eine eigene Datei (Klasse)? Denn bei
Code:
public class RadioButtonGroup implements OnCheckedChangeListener {
wird RadioButtonGroup rot unterstrichen und gesagt das es in einer eigenen Datei definiert werden muss...
java_noob ist offline   Mit Zitat antworten
Alt 12.12.2011, 14:54   #5 (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
Standard AW: RadioButtonGroup

ja klar, und die Datei muß dann auch RadioButtonGroup.java heissen
Tom299 ist offline   Mit Zitat antworten
Alt 12.12.2011, 15:18   #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
Unglücklich AW: RadioButtonGroup

Lässt sich jetzt zwar alles kompilieren aber es funtzt nicht: Wenn ich auf beide RadioButtons klicke werden beide aktiviert
java_noob ist offline   Mit Zitat antworten
Alt 12.12.2011, 15:19   #7 (permalink)
Android Guru

Registriert seit: 09.05.2009
Beiträge: 2.389
Abgegebene Danke: 36
Erhielt 307 Danke für 289 Beiträge
Standard AW: RadioButtonGroup

Zitat:
Zitat von java_noob Beitrag anzeigen
Hä? Soll der erste Code in eine eigene Datei (Klasse)? Denn bei
Code:
public class RadioButtonGroup implements OnCheckedChangeListener {
wird RadioButtonGroup rot unterstrichen und gesagt das es in einer eigenen Datei definiert werden muss...


irgendeinen code kopieren, wird deinen java Kenntnissen nicht grad weiterhelfen.
__________________
App Entwicklung
Latest apps: Media Streamer BETA | DailyCash | MoneyManager ( PRO | HD )
swordi ist offline   Mit Zitat antworten
Alt 12.12.2011, 15:23   #8 (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
Standard AW: RadioButtonGroup

Zitat:
Zitat von swordi Beitrag anzeigen
irgendeinen code kopieren, wird deinen java Kenntnissen nicht grad weiterhelfen.
Glaub ich auch nicht... Aber ich brauch halt nur nen Code der dafür sorgt das man nicht alle Radios aktivieren kann...
java_noob ist offline   Mit Zitat antworten
Alt 12.12.2011, 15:27   #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
Standard AW: RadioButtonGroup

also bei mir funktionierts einwandfrei, nutze es selbst in meinen projekten ... du hast auch nicht die adds vergessen?
Tom299 ist offline   Mit Zitat antworten
Alt 12.12.2011, 15:30   #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
Standard AW: RadioButtonGroup

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);
        
    }
}
java_noob ist offline   Mit Zitat antworten
Antwort

Stichworte
-

Themen-Optionen
Ansicht





Du liest gerade: "RadioButtonGroup" unter "Android Codeschnipsel" auf Android-Hilfe.de.


Powered by vBulletin®
Copyright ©2000 - 2012, vBulletin Solutions, Inc.
Search Engine Friendly URLs by vBSEO
© Android-Hilfe.de 2012 - All rights reserved.