von verschiedenen Activities auf gleiches Objekt zugreifen

L

Lala Pila

Neues Mitglied
0
Hallo zusammen,
obwohl ich mich nicht als totaler Programmieranfaenger bezeichnen wuerde, habe ich - zugegeben - eine ziemliche simple Frage, die ich schon durch die Foren- und Googlesuche zu loesen versucht habe.

Ich habe eine Klasse programmiert, welche so auch vollstaendig als Java-Konsolenanwendung laeuft. Nun habe ich (fuer mich zum ersten Mal) versucht daraus ein App zu machen. Natuerlich mit paar schoenen Activities.

Nun komme ich zum Problem.
Auf einer Activity soll der User z.B. die Spieleranzahl angeben. Im Hintergrund wird dann dem Objekt die Spieleranzahl mitgeteilt und die zweite Activity gestartet, welche dann - in Abhaenigkeit von der Anzahl - nach den Namen der Spieler fragt.

Worauf ich hinaus moechte: Ich moechte von verschiedenen Activities auf das gleiche Objekt zugreifen. Wie muss ich das machen? Muss ich das Objekt irgendwo global erzeugen oder es jeder Activity uerbergeben?

Ich hoffe ihr versteht was ich meine. Wuerde mich freuen, wenn ihr mir helfen koentet. Wenn es noch Fragen gibt, beantworte ich diese natuerlich gerne.

Liebe Gruesse aus Suedafrika
Lala Pila
 
Hi Lala Pila,
So wie ich das sehe hast du zwei Möglichkeiten.
1. Möglichkeit du übergibst der zweiten Activity die Spieleranzahl mit durch "intent.putExtra".
2. Möglichkeit du schreibst eine Klasse, die von der "Application"-Klasse extended wird und da speicherst du alle deine Variablen, die du dann von jeder Activity zugreifen kannst.

Wenn es aber nur um eine einfache Spieleranzahl-"weiterleitung" geht, dann rate ich dir zur ersten Möglichkeit.
 
Hallo BFK,

danke fuer deine Antwort. Die zweite Moeglichkeit waere dann soetwas wie
Code:
public class generatePlayer extends Application {
    public String hallihallo;
}
Wo muss ich das Objekt dann initialisieren?

Gruss
Lala Pila
 
Zuletzt bearbeitet:
Lala Pila schrieb:
Hallo BFK,

danke fuer deine Antwort. Die zweite Moeglichkeit waere dann soetwas wie
Code:
public class generatePlayer extends Application {
    public String hallihallo;
}
Wo muss ich das Objekt dann initialisieren?

Gruss
Falco

Hi,
...zum Beispiel (bei deiner Application-Klasse)..:
Code:
public class generatePlayer extends Application {
    public String hallihallo;

    public void setHalihallo(String ha) { hallihalo = ha; }
    public String getHalihallo(){return hallihalo;}


}
Jetzt bei Activity 1..:

Code:
generatePlayer gP = (generatePlayer)this.getApplication();

gp.setHalihallo("Hallo");
Dann bei Activity 2..:

Code:
generatePlayer gP = (generatePlayer)this.getApplication();

String test = gP.getHalihallo();


Edit..:
Aber wie gesagt, wenn du nur etwas deiner zweiten Activity übermitteln willst, rate ich dir die 1. Möglichkeit zu benutzen, ist unkomlizierter, einfacher und erfüllt ja auch ihren zweck und deine 2. Activity startet ja ehe nach der ersten oder nicht..?
 
Hallo BFK,

danke fuer deine ausfuehrliche Beschreibung. So hat es bei mir nun auch funktioniert. Aber mich interessiert das Thema auch genauer. Also ich suche nicht nur nach einer funktionalen Loesung, sondern auch nach einer "gut programmierten".

Du hast schon Recht, wenn man nur einfache Texte uebermitteln moechte, reicht auch die erste Moeglichkeit. Das von mir beschriebene Szenario ist ja nur der Anfang.
Nach dem jeder seinen Namen eingegeben hat, wird jeder Spieler dran kommen und kann seine Rolle (jeder hat eine andere) "spielen". Und abhaengig von seiner Wahl, passiert dann auch etwas mit dem Spieler-Objekt.

Ist die zweite Loesung denn auch "professionell"? Ist es Ueblich, auf einer Activity-Seite zu bleiben, die sich dann immer aendert? Also dass man nur die GUI aendert, man aber eigentlich auf der gleichen Activity-Seite bleibt?

Als Beispiel kann man auch das kleine Spiel nennen, was ich im Sinn hat. Jede Rolle kommt in einer Runde (es gibt x-Runden) einmal dran und waehlt einen Spieler (aus einer bestimmten Auswahl). Und abhaenhig von der Rolle, wie oben beschrieben, passiert dann etwas mit dem Spieler(-Objekt). Manchmal kann eine Rolle aber mehrere Spieler auswahlen. Das Interface ist also nicht bei allen Rollen identisch.

Wenn die Sitatuon X eintrifft, ist aber das Spiel beendet und eine Partei hat gewonnen. Spaetestens dann sollte ich doch die Activity aendern und detailliert anzeigen, wer warum gewonnen hat - oder nicht?
 
Es gibt Instanzvariablen und Klassenvariablen. Das selbe gilt für Methoden und Klassen. Sprich - bei einer Instanzvariablen gehört der Wert der in der Variablen steht der Instanz, also dem Objekt. Eine Klassenvariable gehört der Klasse und wird durch static vor dem Variablenbezeichner/Methodenbezeichner/Klassenbezeichner markiert.

Also, du hast eine Klasse Hase mit einem String name. Außerdem eine statische Variable counter. Beim Konstruktoraufruf, also beim erzeugen eines neuen Objektes vom Typen Hase wird ein name festgelegt und der counter wird um eins erhöht.
Hast du nun drei Objekte vom Typ Hase erzeugt, hast du drei unterschiedliche Hasen. Über die Klasse hast du nun Zugriff auf deine statische Variable counter. Also über den Aufruf Hase.counter. Dieser wird dir nun 3 liefern.

Hoffe das hilft dir weiter.
 
Lala Pila schrieb:
Hallo BFK,

danke fuer deine ausfuehrliche Beschreibung. So hat es bei mir nun auch funktioniert. Aber mich interessiert das Thema auch genauer. Also ich suche nicht nur nach einer funktionalen Loesung, sondern auch nach einer "gut programmierten".

Du hast schon Recht, wenn man nur einfache Texte uebermitteln moechte, reicht auch die erste Moeglichkeit. Das von mir beschriebene Szenario ist ja nur der Anfang.
Nach dem jeder seinen Namen eingegeben hat, wird jeder Spieler dran kommen und kann seine Rolle (jeder hat eine andere) "spielen". Und abhaengig von seiner Wahl, passiert dann auch etwas mit dem Spieler-Objekt.

Ist die zweite Loesung denn auch "professionell"? Ist es Ueblich, auf einer Activity-Seite zu bleiben, die sich dann immer aendert? Also dass man nur die GUI aendert, man aber eigentlich auf der gleichen Activity-Seite bleibt?

Als Beispiel kann man auch das kleine Spiel nennen, was ich im Sinn hat. Jede Rolle kommt in einer Runde (es gibt x-Runden) einmal dran und waehlt einen Spieler (aus einer bestimmten Auswahl). Und abhaenhig von der Rolle, wie oben beschrieben, passiert dann etwas mit dem Spieler(-Objekt). Manchmal kann eine Rolle aber mehrere Spieler auswahlen. Das Interface ist also nicht bei allen Rollen identisch.

Wenn die Sitatuon X eintrifft, ist aber das Spiel beendet und eine Partei hat gewonnen. Spaetestens dann sollte ich doch die Activity aendern und detailliert anzeigen, wer warum gewonnen hat - oder nicht?

Hi Lala Pila,
Ich glaube in deinem Fall wäre eine Android-Game-Engine oder sowas ähliches sehr hilfreich. Leider habe ich in diesem Bereich keine Erfahrungen. Aber du könntest ja danach googeln. Ich glaube aber, dass so eine Engine deine vorhaben sehr erleichtern wird. Guck dir zum Beispiel folgende Liste an (Android Game Engines / Engines List - Android Games, Gamers & Gamedevelopers | XING)
Die 2. Lösung, die ich dir vorgeschlagen habe kann Probleme lösen, die zum Beispiel nicht durch intents gelöst werden können. Zum Beispiel hat man eine TabActivity die aus 2 Activities besteht und man möchte wenn der Nutzer von der einen Activity zur anderen wechselt Daten übermitteln. Da könnte die 2. Lösung sehr hilfreich sein.
 

Ähnliche Themen

M
Antworten
4
Aufrufe
1.168
swa00
swa00
M
  • MikelKatzengreis
Antworten
5
Aufrufe
114
swa00
swa00
Zurück
Oben Unten