Verständnisproblem bei Activitys

  • Hi,
    ich habe wohl ein Verständnisproblem bei dem starten von Activitys, bzw. wie man diese managed. Bisher hat es mir gereicht ein Activity über startActivity(..) zu starten. Jetzt bin ich an einem Punkt angekommen der einen anderen Ablauf benötigt. Bisher habe ich leider noch nichts gefunden das mich weiter gebracht hat.


    Ich habe in etwa folgendes Szenario: Activity A startet Activity B, Activity A erwartet ein Objekt als Antwort. Es gibt in Activity B eine Liste zum Auswählen die das Objekt als Antwort liefert UND Buttons mit denen weitere Activitys gestartet werden z.B. Cy,Cx und Cz. Jede dieser neuen C Activitys kann ebenfalls das erwartete Objekt an Activity A zurück geben. Wenn in C ein Objekt angeklickt wird, soll in Activity A gesprungen werden und der Activity Stack soll danach leer sein. Wenn man in Activity C den zurück Button klickt, soll man in Activity B landen, also den Weg ganz normal zurück.


    Wie muss ich Activity B aufrufen? Mit startActivityForResult()? Und wie müssen die Activitys C in B aufgerufen werden?


    Ich befürchte ich hatte einen ganz miserablen Einstieg bei den Activitys und Intends, so das ich jetzt ne falsche Vorstellung davon habe.


    Neben Codeschnippeln würde ich mich auch über ein paar Vorschläge zu Tutorials und Code-Beispielen freuen die das Thema betreffen.




    Viele Grüße
    Manuel

  • Hoi,


    da ich in meinem aktuellen Projekt nur eine einzige Activity verwende, bin ich etwas eingerostet, was das an geht. Trotzdem will ichs mal probieren ;)


    Also so wie ich das verstehe rufst du eine Activity auf und erwartest einen Return-Value o.ä. was so aber nicht gedacht ist. Du rufst eine Activity auf, diese wird geöffnet dann ist die aufrufende Activity geschlossen. Vielleicht wird sie noch im RAM gehalten aber sobald der knapp wird wird sie gnadenlos ab geschossen. Also eigentlich musst du deine Activity B aufrufen, die auf seine Button-Clicks reagiert. Je nachdem ruft diese dann mit einem neuen Intent wieder Activity A auf und gibt Daten mit wie booleans, mithilfe dieser du dann deine Activity A handeln kannst.


    Also ich würde die jeweiligen Activitys ganz normal mit sowas hier aufrufen


    Java
    Intent i = new Intent(this, MyActivityB.class);
    i.putExtra("iComeFromA", true);
    startActivity(i);


    und in den jeweiligen onCreate Methoden dann je nachdem was wie wo gesetzt ist aktionen ausführen

    Java
    Bundle extras = getIntent().getExtras(); 
    
    
    if (extras != null && extras. getBooleanExtra("iComeFromA", false)) {
    // do something
    }


    Ich hoff, das hilft dir irgendwie weiter ;)



    Gruß,
    matze

  • Hi matze,


    danke für deine Antwort und Mühe. So wie du es beschreibst kannte ich es bereits schon. Dabei wird das Problem sein, das wenn ich von C in A springe und dann den "zurück" Button klicke, das ich wieder in C landen werde, das soll nicht möglich sein.


    Da ich heute Abend mal wieder Zeit habe, werde ich es auf dem alt bekannten Weg versuchen.

  • Ich habe die Lösung gefunden, zu mindestens funktioniert es so. Wen es interessiert...


    In A rufe ich B mit startActivityForResult(..) auf und definiere in A noch den "RequestCode" als static. Wenn in B ein Element aus der Liste ausgewählt wird, erstelle ich das Intent mit dem Ziel von A, setzte es mit setResult(..) und rufe finish() auf (der ResultCode ist durch den Aufruf in A bekannt und wird vom System automatisch im result gesetzt). Die erweiterten Listen (Activity C) rufe ich in B ebenfalls mit startActivityForResult(..) auf und gebe als RequestCode den aus A an. Wenn ich in C zurück gehe, mache ich dies ganz normal über startActivity(..). Wird ein Element ausgewählt, dann erstelle ich das Intent ohne Ziel-Angabe, setzte nur die Extras, rufe setResult(..) und dann finish() auf. Jetzt wird B aufgerufen, was ich eigentlich nicht will, jedoch kommt jetzt der "Trick". In B überschreibe ich ebenfalls onActivityResult(..). Das Ergebnis aus C kommt an, dort überprüfe ich ob es auch den richtigen RequestCode hat. Wenn ja, dann rufe ich einfach mit dem Ergebnis setResult(..) und finisch() auf.


    Die App verhält sich so wie gedacht, der "Stack" ist gelöscht. Mit dem "zurück" Button komme ich, wie gewollt, in die Activity die A gestartet hat und nicht in C oder B. Der Anwender bekommt gar nicht mit das zuerst B und dann A aufgerufen wird.



    Oje... ich habe jetzt nochmal über das von mir geschriebene drüber gelesen, ich hoffe es ist zu verstehen. Wäre es nicht so spät hätte ich es vermutlich nochmal geschrieben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!