Activity wechseln im Tab

  • Hallo zusammen,


    ich habe ein TabLayout mit mehreren Tabs. Zu jedem Tab gehört eine Activity. Das Wechseln der Tabs funktioniert problemlos, aber darum geht es nicht ;)
    Wie muss ich einen Intent einstellen, damit eine neue Activity


    1. Im aktiven Tab aufgerufen wird
    oder
    2. Statt des gesamten TabLayouts aufgerufen wird?


    Viele Grüße, R2

  • Wichtig: eine Activity ist ein in sich geschlossener Programmbaustein, da Android die komplette Speicherverwaltung übernimmt, kümmert sich Android auch darum ob die Activity in Speicher verbleibt oder nicht. Wenn der Speicher knapp wird, schmeisst er sie raus und wenn wieder darauf zugegriffen wird, feuert er ein onResume, bzw wenn Sie nicht mehr im Speicher ist ein onCreate.


    Wenn du den Zustand deiner Activiy speichern willst musst du dich selber drum kümmern, ebenso um die Übergabe von Daten (putExtra, getEtxra).

  • Vielleicht suchst du auch nach dem Befehl finish() - dann endet deine Activity auf Knopfdruck und die vorige kommt wieder zum Vorschein. Ansonsten gibt es bei Android ja meistens den Back-Button am Gerät.


    Aber Killphil hat recht - die eigenen lokalen Variablen der ersten Activity können verloren gehen und müssen deshalb entweder gesichert oder wieder neu erzeugt werden (z.B. wenn die andere Acitivity die Datenbank ändert oder sonst etwas speichert oder löscht).

  • Durch finish() oder den Backbutton beendet sich das ganze Programm...


    Ist denn jetzt mein ganzer Ansatz falsch oder wie löse ich das Problem am besten?
    Ich habe mehrere Tabs mit Listen jeweils. Wenn man ein Listitem auswählt, sollen Details angezeigt werden, ohne dass die Tabs verschwinden.

  • Ich habe ein ähnlich gelagertes Verständnisproblem.


    Eine Anwendung, zwei Tabs mit je einem eigenen Intent.
    Rufe ich jetzt aus einem Intent (sagen wir mal dem Zweiten) einen weiteren Intent mit der Bitte um Rückgabewert auf, beispielsweise um einen Punkt zur Liste hinzuzufügen, kachelt die App ab.


    Java
    public void addItemToStockList() {
      Intent addItemIntent = new Intent(this, EditItem.class);
      startActivityForResult(addItemIntent, ACTIVITY_CREATE);
    }


    onActivityResult() ist in der Klasse des aufrufenden Intents (StockListActivity.java) implementiert.


    Die EditItem.java sieht recht unspektakulär aus, weshalb ich nur den Button aufzeige:


    Ich stelle fest: die Activity geht einmal durch einen RunLoop und meine onActivityResult()-Implementation wird in der Klasse für das TaActivity (TabControllerActivity) erwartet.


    Mutmaßlich kann ich daran auch nix ändern.


    Welche Möglichkeiten habe ich, onActivityResult() einfach an den im Tab aktuellen Intent weiterzuleiten?
    Eine Art Responder Chain habe ich nicht ausfindig machen können, das Activity Lifecycle Diagramm ist auch nicht sehr hilfreich für mich.



    ArtooDetoo
    Sehr gute Frage. Rein intuitiv würde ich sagen, einfach via tabHost.getCurrentTab() eine Referenz auf den aktuellen TabSpec holen und dessen Intent via setContent() neu setzen.
    Dummerweise liefert getCurrentTab() einen Integer zurück, keine Referenz auf den aktuellen Tab. getCurrentTabView() liefert immerhin ein View...

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

  • Hallo Lucas,


    du hast zwar einen Antwort-Intent gebaut, aber nicht zurückgegeben.


    Schreib mal EditItem.this.setResult(RESULT_OK, defaultIntent); vor den finish();


    Das erklärt aber nicht unbedingt den Absturz - da müsstest du mal die Logs anschauen, was da angemeckert wird.

  • Ich habe mein Problem jetzt folgendermaßen gelöst:
    Es wird tatsächlich keine neue Aktivität gestartet, sondern nur per setContentView() das Layout ausgetauscht.
    Das Programm merkt sich die Position der Liste, an der man stand und beim drücken des Backbuttons wird das Layout wieder zurück geändert, die Liste wieder gefüllt und an die letzte Position gesprungen.

  • das ist eine Lösung - ansonsten startest du eine andere Activity, die muss dann aber die Tabs selber auch wieder aufbauen - Activities sind halt unabhängige Teile, die jeweils den vollen Schirm bekommen

  • Danke für den Tipp!


    Das mit dem EditItem.this... ist ja kurios.
    Nur this gibt die Methode onClickListener wieder. Das muss einem aber erst mal auffallen. :)

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

Jetzt mitmachen!

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