# Über ChoiceGroup neuen Screen öffnen?



## MC_Basstard (4. Mrz 2010)

Hallo Leute,

ich bräuchte da mal ne kleine Hilfe.

Ich habe eine ChoiceGroup, in der ich z.B. 3 Auswahlen habe.

Wenn ich nun eine anklicke möchte ich, das sich ein neuer screen öffnet.
Wenn ich dort dann auf Back gehe, möchte ich wieder bei der ChoiceGroup sein.

Ich weiß leider nicht genau wie ich das anstellen soll.

Wär toll wenn mir jemand helfen kann.
Wenn ihr irgendwie nen Quellcode braucht sagt bitte bescheid.

Gruß
Stefan


----------



## Gast2 (4. Mrz 2010)

Kannst z.B. ein CardLayout nehmen und je nach dem was ausgewählt wurde auf die entsprechende Card wechseln. Alle Cards haben einen Backbutton (oder ein gemeinsamen in einem anderen Panel) der wieder auf Card 1 mit den Auswahlbuttons wechselt.

Whoops - ist ja J2ME... Sorry, hab nichts weiter gesagt


----------



## florian1x (6. Mrz 2010)

Du kannst das ganze über den CommandListener Steuern. 
Machst dir einfach einen OKCommand und BackCOmmand

hier mal ein Beispiel:


```
import javax.microedition.lcdui.Choice;
import javax.microedition.lcdui.ChoiceGroup;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.midlet.*;

/**
 * @author Florian
 */
public class meinMID extends MIDlet implements CommandListener {

    ChoiceGroup cg;
    Form frm, einsFrm, zweiFrm, dreiFrm; //verschiedene Forms
    Command okCmd; //Command zum Bestätigen der Auswahl
    Command backCmd; //Command zum Zurückspringen

    public meinMID() {
        cg=new ChoiceGroup("Auswahl:",Choice.EXCLUSIVE);
        cg.append("eins",null);
        cg.append("zwei",null);
        cg.append("drei",null);

        okCmd = new Command("OK",Command.OK,1);
        backCmd = new Command("Back",Command.BACK,1);

        //Hauptform
        frm = new Form("Choice Group Demo");
        frm.addCommand(okCmd);
        frm.append(cg);  //ChoiceGroup Anhängen
        frm.setCommandListener(this);

        //Nebenforms
        einsFrm = new Form("Form Eins");
        einsFrm.addCommand(backCmd);
        einsFrm.setCommandListener(this);

        zweiFrm = new Form("Form Zwei");
        zweiFrm.addCommand(backCmd);
        zweiFrm.setCommandListener(this);

        dreiFrm = new Form("Form Drei");
        dreiFrm.addCommand(backCmd);
        dreiFrm.setCommandListener(this);
    }

    //Standart MIDlet Methoden
    public void startApp() {
        Display.getDisplay(this).setCurrent(frm);
    }

    public void pauseApp() {}

    public void destroyApp(boolean unconditional) {}

    //Listener
    public void commandAction(Command c, Displayable d) {
        //Für das Hauptmneu
        if (d == frm) {
            if (c == okCmd) {
                //Wenn Ok gedrückt wurde soll in das entsprechende Fenster
                //gewechselt werden
                if(cg.isSelected(0)){ //Eins wurde ausgewählt
                    Display.getDisplay(this).setCurrent(einsFrm);
                }else if(cg.isSelected(1)){ //Zwei wurde ausgewählt
                    Display.getDisplay(this).setCurrent(zweiFrm);
                }else if(cg.isSelected(2)){ //Drei wurde ausgewählt
                    Display.getDisplay(this).setCurrent(dreiFrm);
                }
            }
        }

        if(d == einsFrm){
            if(c == backCmd){
                Display.getDisplay(this).setCurrent(frm); //Zurückspringen zum Hauptfenster
            }
        }

        if(d == zweiFrm){
            if(c == backCmd){
                Display.getDisplay(this).setCurrent(frm); //Zurückspringen zum Hauptfenster
            }
        }

        if(d == dreiFrm){
            if(c == backCmd){
                Display.getDisplay(this).setCurrent(frm); //Zurückspringen zum Hauptfenster
            }
        }
    }


}
```

dafür musst du jedoch wissen auf welchen Screen du zurückspringen willst.
gut beim zurückspringen müsste man in diesem fall nicht immer vorher d abfragen und könnte alles zusammenfassen.
aber so find ichs schöner 

und ich würds eher über eine List machen, aber ich weiss ja nicht genau was du da vor hat

mfG Florian Weinhold


----------



## MC_Basstard (8. Mrz 2010)

Geil Danke, hat wunderbar funktioniert :toll:
Muss ich nur noch schaun wie ich des am besten in ne Schleife pack.

Ich weiß, das es mit ner List einfacher ist, leider will ich mir da zwei Sachen anzeigen lassen, weswegen ich die Form verwende und ne ChoiceGroup.

Das blöde ist, das man bei der ChoiceGroup kein IMPLICIT verwenden kann, da das eigentlich genau das ist, was ich brauche.

Oder gibt es eine möglichkeit eine List + ein Textfeld anzeigen zu lassen?

Gruß
Stefan


----------



## The_S (8. Mrz 2010)

Nur wenn du selbst zeichnest.


----------



## MC_Basstard (8. Mrz 2010)

Ok schade,

das is leider nicht in meinen Absichten, da es auf jedem x-beliebigen Handy laufen soll, und es sonst bei jedem schief und krum aussieht.

Nun noch eine kleine frage, ich will erreichen, das egal welches Element in der ChoiceGroup ich anklicke, die gleiche Form geöffnet wird, in dem ich im Nachhinein verschiedene Sachen übergeben will.
Deswegen versuche ich hier eine Schleife zu machen:


```
if (d == frm) {
            if (c == okCmd) {
                for(int a = 0; a<3;a++){
                     int b = 0;
                     int x = b++;
                   if(cg.isSelected(x)){ //Eins wurde ausgewählt
                    Display.getDisplay(this).setCurrent(einsFrm);
                    //break;
                   }
                return;
                }
            }
        }
```

Hab schon n paar Sachen Versucht, das hier ist mein letzter versuch. Ich weiß nicht, wie ich das isSelected(?) so ändern kann, dass ich auch andere Elemente anklicken kann und sich dann die neue Form öffnet.

Gruß
Stefan


----------



## florian1x (8. Mrz 2010)

ich verstehe noch nicht so ganz was du vorhast.


```
int b = 0;
int x = b++;
```

damit wird x bei jedem schleifendurchlauf immer auf 0 gesetzt und b danach auf 1
du müsstest b außerhalb der schleife Deklarieren.
Aufjedenfall kann man hier auch einfach 


```
int b = 1;
int x = 0;
```

schreiben

EDIT:

ich glaube jetzt hab ich gepeilt was du willst.

Wenn du bei egal welcher auswahl den nächsten screen haben willst, kannst du die Abfrage einfach weglassen


```
if (d == frm) {
    if (c == okCmd) {
        Display.getDisplay(this).setCurrent(einsFrm);
    }
}
```

und zur Erklärung cg.isSelected(x) gibt true zurück, wenn das Element x ausgewählt ist, und false es nicht ausgewählt ist. 

Da du wascheinlich die ChoiceGroup als Klassen Attribut deklariert hast wirst du die Information welches Element ausgwählt ist auch noch später abfragen können.


----------



## MC_Basstard (9. Mrz 2010)

Danke erstmal für die Antwort. 
Hätt ich mir schwerer vorgestellt.

Aber so kann ich denk ich mal ... ich weiß grad nicht wie ich das bescheiben soll.

Die Hauptsache, für was ich das brauche ist, dass ich aus einer txt-Datei etwas in die ChoiceGroup einlese, z.B.:
Hans Maier, 0123 2423534
Toni Mur, 1239 20954371

Und je nach dem welches Element ich dann anklicke, soll in der neuen Form irgendwo (weiß ich jetzt noch nicht genau, wie ich das dann weiter mache) die Nummer übergeben werden.

Deswegen dachte ich, ich mach das mit der Auswahl in einer Schleife, dann weiß das Programm genau was ich angeklickt habe, und kann dann von diesem Element auch irgendwie etwas übergeben.

Leider bin ich neu in diesem Gebiet und weiß nicht was sich da alles für Möglichkeiten bieten und ich dachte so müsste das eigentlich irgendwie gehen.

Gruß
Stefan


----------



## florian1x (14. Mrz 2010)

Versuchs mal mit 


```
cg.getString(cg.getSelectedIndex())
[/JAvA]

damit kriegste den text, des ausgewählten Elements. Wobei ich mir gerade nicht so sicher bin ob man getSelectedindex() da so einfach reinmachen darf. Weil wenn kein element ausgewählt ist, gibt die Funktion -1 zurück und da könnte getString nen Fehler erzeugen. Müsste man vorher überprüfen.
```


----------

