Wertübergabe per Intent - funktioniert nur einmal

  • 2 Antworten
  • Letztes Antwortdatum
S

skm

Neues Mitglied
0
Hey,

ich arbeite gerade an einer Spiele-App, welche auch schon zu einem großen Teil fertig ist, allerdings habe ich ein Problem damit Daten per
Intent zwischen zwei Activities zu tauschen. Folgende Situation:

In der MainActivity enthält im Grunde das Hauptmenü, wo es für jedes zur Verfügung stehende Level einen Button mit Vorschaubild gibt.
Klickt man auf einen dieser Button wird das zugehörige Level gestartet und es wird zur GameActivity gewechselt. Gleichzeitig wird per Intent
die ID des Lebels an die GameActivity übergeben.

Die GameActivity kümmert sich dann um die Darstellung der Level-Oberfläche und benachrichtigt andere Klassen, die die Spiellogik enthalten.
Bei der GameActivity gibt es einen einzigen Button, mit dem man wieder zurück zum Menü kommt (= Wechsel zur MainActivity).
Gleichzeitig soll hier wiederum per Intent ein Wert übergeben werden (der Highscore), aber dies klappt nicht.

Kurz zusammengefasst:
MainActivity-------->LevelID------->GameActivitiy: Funktioniert
MainActivity<--------Highscore<-----GameActivity: Funktioniert nicht

Hier die Wichtigsten Auszüge aus dem Code:


MainActivity - LevelId an GameActivtiy:
PHP:
levelButton.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                
                Intent intent = new Intent(getApplicationContext(), com.example.game.applogic.GameActivity.class);
                intent.putExtra("levelId", level);
                startActivity(intent);
            }
        });
GameActivity - LevelId von MainActivity entgegennehmen:
PHP:
int currentLevel = getIntent().getIntExtra("levelId", 0);
Funktioniert


GameActivity - Highscore an MainActivtiy:
PHP:
@Override
         public void onClick(View v) {

                Intent intent = new Intent(getApplicationContext(), com.example.game.applogic.MainActivity.class);
                intent.putExtra("highscore", highscore);
                startActivity(intent);
}
MainActivity - Highscore von GameActivity entgegennehmen:
PHP:
@Override
public void onResume() {
        super.onResume();
        
        int highscore = getIntent().getIntExtra("highscore", 0);
}
Funktioniert nicht!

Wie man sehen kann ist der Code vom Prinzip her identisch, nur einmal
funktioniert die Wertübergabe, in die andere Richtung funktioniert er nicht.
Hab schon ziemlich viel rumprobiert, es aber bislang nicht hinbekommen.
Auch mit startActivityForResult(), wie hier beschrieben (What is Intent in android? | vimviv.com knowledge base) klappt es nicht.

Weiß jemand Rat? Wäre sehr dankbar. :tongue:


Edit:
Mir ist aufgefallen, dass auch die Rückrichtung (GameActivtiy -> MainActivity) funktioniert, sobald ich die MainActivity nach dem Wechsel zur GameActivity schließe (finish() nach startActivity(intent)).
Gibt es auch eine Lösung, ohne dass die MainActivity geschlossen werden muss?
 
Zuletzt bearbeitet:
skm schrieb:
Edit:
Mir ist aufgefallen, dass auch die Rückrichtung (GameActivtiy -> MainActivity) funktioniert, sobald ich die MainActivity nach dem Wechsel zur GameActivity schließe (finish() nach startActivity(intent)).
Gibt es auch eine Lösung, ohne dass die MainActivity geschlossen werden muss?

Es sollte reichen, wenn du nur die GameActivity mit finish() beendest.

Also der eine Weg so:
MainActivity --> MainActivity.StartActivityForResult -> GameActivity

und der Rückweg dann so:
MainActivity <-- MainActivity.onActivityResult <-- GameActivity.finish <-- GameActivity.setResult <-- GameActivity

Du brauchst nirgends in der GameActivity einen Aufruf von startActivity. Da die GameActivity ja von der MainActivity erzeugt wurde, reicht da ein finish, um wieder zur MainActivity zurückzukehren.
 
Zuletzt bearbeitet:
Danke für die Hilfe Zoopa, leider hat es bislang nicht geholfen.
Habe die Schritte genau befolgt, aber das zurückgegebene "Intent data" in "onActivityResult" ist immer null.
setResult wird in der GameActivity vor finish() aufgerufen.

Folgendes ist mir noch aufgefallen:
Ich habe einige Log.d() definiert, eins davon in "onActivityResult".
Dieses Log.d wird komischerweise sofort ausgegeben, sobald GameActivity mit "startActivityForResult" aufgerufen wurde und nicht erst,
nachdem per Button-Klick zur MainActivity zurückgekehrt wird.

Was könnte demnach "onActivityResult" zu früh aufrufen, so dass "data" null ist?
Die GameActivity läuft jedenfalls noch lange, nachdem das besagte Log.d ausgegeben wurde. Das Log.d() von "onActivityResult" wird ausgegeben unabhängig
davon ob auf den Menu-Button in GameActivity geklickt wird oder nicht.
 

Ähnliche Themen

AnnaBauer21
Antworten
0
Aufrufe
488
AnnaBauer21
AnnaBauer21
AnnaBauer21
Antworten
6
Aufrufe
989
AnnaBauer21
AnnaBauer21
Zurück
Oben Unten