1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

Wert an Activity B von Activity B übergeben

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von Beni, 13.09.2010.

  1. Beni, 13.09.2010 #1
    Beni

    Beni Threadstarter Neuer Benutzer

    Beiträge:
    15
    Erhaltene Danke:
    0
    Registriert seit:
    13.09.2010
    Hallo zusammen

    Ich bin neu hier und habe angefangen mit Eclipse Android zu programmieren. Bin natürlich noch blutiger Anfänger ;)

    Nun bin ich auf ein (sicher simples Problem) gestossen. Ich hab schon einiges gesucht, aber noch nichts passendes gefunden, obwohl es eigentlich recht einfach sein dürfte.

    Ich bin gerade an einer "einfachen" app am programmieren. Nun will ich einen Wert, oder eine Variable an eine zweite Activity weitergeben, welche aber einen konstanten Wert hat.

    Versuche das mal einfach zu beschreiben, damit ihr seht, das ich echt was simples brauche ;)

    Also:

    Auf Activity A habe ich 10 Buttons und immer wenn ich auf einen dieser Buttons drücke, öffne ich Activity B. Nun will ich aber jedem Button einen Wert mitgeben. Der Name der Variable mit diesem Wert muss aber immer die selbe sein.

    Button1, VariableX=1
    Button2, VariableX=2
    Button3, VariableX=3

    usw.

    Auf Activity B will ich dann diesen Wert der VariableX überprüfen und je nach Wert etwas ausführen.

    if VariableX =1, dann mach das
    if VariableX =2, dann mach dies
    if VariableX =3, dann mach jenes

    Was ich damit machen will...ich will eine Viewlist machen und je nach gedrücktem Button soll mir die Viewlist einen anderen Inhalt anzeigen.

    Hoffe man kommt draus was ich meine ;) Und dass mir jemand von euch helfen oder einen Tipp geben kann. Wäre aber froh für eine Antwort mit dem ganzen Befehl (also Activity A und B), denn ich habe schon einiges ausprobiert, aber finde wohl nicht den passenden Befehl

    Habe auch einen Code gefunden, mit dem man einen Wert übergeben kann, aber dummerweise muss man ihn dort selbst angeben. Sprich, ich gebe in einem Textview von Activity A z.B. das Wort "hallo" ein und auf Activity B kommt dann: Ihr Wort war "hallo". Aber eben, das brauch ich nicht so, ich will nichts eingeben müssen, sondern einen fixen Wert mitschicken, den ich dann auswerten kann.

    Vielen Dank schonmal, falls mir jemand helfen kann :)

    Gruss Beni
     
  2. ko5tik, 13.09.2010 #2
    ko5tik

    ko5tik Android-Experte

    Beiträge:
    620
    Erhaltene Danke:
    40
    Registriert seit:
    14.10.2009
    Phone:
    HTC Hero
    Also, eine Aktivity braucht den Wert, nur wenn es aktiv wird - deswegen kannst du
    es in einen Klasse ( statisch ) oder in den Preferences / Datei abspeichern.

    Du kannst diese Werte auch in dem Intent mitgeben, dem du Benutzts um die Aktivity zu starten
     
  3. Beni, 13.09.2010 #3
    Beni

    Beni Threadstarter Neuer Benutzer

    Beiträge:
    15
    Erhaltene Danke:
    0
    Registriert seit:
    13.09.2010
    Vielen Dank schonmal für Deine Antort :)

    Das mit dem Intent habe ich schon versucht, es würde auch klappen. Also es klappt auch meine ich ;) Ich kann z.B. auf Button1 in Activity 1 drücken und es öffnet sich Activity 2.

    Aber wie sieht dann der Befehl aus für diesen Intent um eine Variable mitzugeben?

    Sowas habe ich schon gefunden, aber ich komm damit nicht klar...

    Intent i = new Intent(ActivityA.this, ActivityB.class);

    i.putExtra("KEY", "WERT");

    Wie sieht denn der Befehl für einen stinknormalen Wert aus, den ich weitergeben möchte? Also irgendwie sowas:

    Intent i = new Intent(ActivityA.this, ActivityB.class);

    i.putExtra(Meine_Variable=1);

    und wie ruf ich dann dies bei Activity B wieder auf?

    Also:

    Activity B

    Lade "Meine_Variable"

    if Meine_Variable=1, dann
    if Meine_Variable=2, dann
    if Meine_Variable=3, dann

    (oder mit einem Case dann)

    Kann gerne das Beispiel posten, welches ich gefunden habe um einen Wert in Activity 1 zu schreiben, welcher dann in Activity angezeigt wird. Falls man dann den so umändern kann, dass ich nichts eingeben muss, sondern eine Vorgegebene Variable mitgeschickt wird. Wenn das geht, wäre ich auch froh ;)
     
  4. Fr4gg0r, 13.09.2010 #4
    Fr4gg0r

    Fr4gg0r App-Anbieter (Werbung)

    Beiträge:
    2,506
    Erhaltene Danke:
    447
    Registriert seit:
    21.12.2009
    intent.putExtra("position", 1); //die zahl bei jedem button anpassen
    dann in der neuen activity
    String whichButton = getIntent().getStringExtra("position");
     
  5. ko5tik, 13.09.2010 #5
    ko5tik

    ko5tik Android-Experte

    Beiträge:
    620
    Erhaltene Danke:
    40
    Registriert seit:
    14.10.2009
    Phone:
    HTC Hero
    Und natürclih guarden gegen NPE nicht zu vergessen
     
  6. Beni, 13.09.2010 #6
    Beni

    Beni Threadstarter Neuer Benutzer

    Beiträge:
    15
    Erhaltene Danke:
    0
    Registriert seit:
    13.09.2010
    Vielen Dank Euch, für das helfen :)

    Ich habe nun bei Activity A das gemacht:
    ----------------------------------------------------------------------
    Intent i = new Intent(Activity A.this, Activity B.class);
    i.putExtra("position", 1);
    startActivity(i);
    ----------------------------------------------------------------------
    und Activity B:

    ----------------------------------------------------------------------
    String whichButton = getIntent().getStringExtra("position");
    ----------------------------------------------------------------------

    Einen Fehler bringt er nun nicht, nur dass ich "whichButton" noch nirgends verwende.

    Ich nehme an, mein Wert 1 wird nun im String "whichButton" sein, richtig?
    Aber wenn ich nun einen vergleich mache, oder sonst diesen String mit einbeziehe, schliesst die App immer.

    Wenn ich z.B. sowas mache um es zu testen:

    ----------------------------------------------------------------------
    if (whichButton .length() == 0)
    {
    new AlertDialog.Builder(this)
    .setMessage(R.string.error_name_missing)
    .setNeutralButton(R.string.error_ok, null)
    .show();
    return;
    }
    ----------------------------------------------------------------------

    Da ja mein String nicht leer ist, sollte er doch diese Abfrage überspringen, aber eben, soweit komme ich gar nicht.

    Ich habe diese Abfrage schon verwendet, sollte also eigentlich gehen, sonst einen Sytax Fehler zeigt er mir auch nicht gerade an.

    Könnt Ihr mir nochmals helfen, warum oder wo der Fehler liegt? Sobald ich mit dem String arbeiten will, kackt es beim Button drücken im Emulator ab.

    Vielleicht wäre eine Lösung über Globale Variablen besser, sofern ich die von jeder Activity auch wieder überschreiben kann. Müsst ich mich erst schlau machen ;)

    Danke nochmals.
     
  7. Fr4gg0r, 13.09.2010 #7
    Fr4gg0r

    Fr4gg0r App-Anbieter (Werbung)

    Beiträge:
    2,506
    Erhaltene Danke:
    447
    Registriert seit:
    21.12.2009
    sry aber du bekommst null zurück. :D
    Du gibst nämlich 1 als int und nicht "1" als String.
    Ups, sry, war meine Schuld.
    Also entweder "1" übergeben oder int pos = getIntent().getIntExtra("position", 0); //zweite parameter ist default value der dir zurückgegeben wird, falls das Extra nicht gefunden wurde, bei Strings ist dies immer null.
     
    Zuletzt bearbeitet: 13.09.2010
  8. Beni, 13.09.2010 #8
    Beni

    Beni Threadstarter Neuer Benutzer

    Beiträge:
    15
    Erhaltene Danke:
    0
    Registriert seit:
    13.09.2010
    Juhuuuuuuuuu, hat geklappt :) *freu*

    Danke vielmals!!!! :)
     
  9. Beni, 14.09.2010 #9
    Beni

    Beni Threadstarter Neuer Benutzer

    Beiträge:
    15
    Erhaltene Danke:
    0
    Registriert seit:
    13.09.2010
    Hallo zusammen

    Ich bin es nochmal ;) Ich wollte fragen, ob mir nochmals wer helfen kann. Ich suche ein Beispiel, wie man globale Variablen erstellen/deklarieren kann.

    Es müssten hauptsächlich nur zahlen sein, also keine Strings.

    Mein Ziel ist es, einige Variablen, wie gesagt global zu deklarieren, damit ich sie in jeder Activity abfragen und auch in jeder Activity die möglichkeit habe, die globale Variable zu ändern.

    Also so:

    Main:

    globale_variable1 = 1;
    globale_variable2 = 10;
    globale_variable3 = 15;

    Activity1 öffnen:

    globale_variable1 lesen (globale_variable1 = 1)
    irgendetwas ausführen
    globale_variable1 ändern und speichern (z.B. globale_variable1 = 8)

    Activity2 öffnen

    globale_variable1 lesen (globale_variable1 = 8)
    irgendetwas ausführen
    globale_variable1 ändern und speichern (z.B. globale_variable1 = 4)

    und dies natürlich dann mit allen definierten globalen Variablen.

    Ist dies möglich? Wenn ja, kennt wer ein Tutorial oder kann mir einen einfachen aber kompleten Beispiel-Code zeigen, damit ich mit dem rumprobieren kann?

    Vielen Dank schonmal, falls jemand Zeit hat :)

    Gruss Beni
     
  10. BenOtto, 14.09.2010 #10
    BenOtto

    BenOtto Android-Hilfe.de Mitglied

    Beiträge:
    141
    Erhaltene Danke:
    15
    Registriert seit:
    30.08.2010
    Am einfachsten gibtst du deiner Start-Activity statische public-Variablen. Bspw:
    PHP:
    public class MyStartActivity extends Activity {
        public static 
    int myFirstGlobalVar 1;
        public static 
    int mySecondGlobalVar 2;

        
    /* ... */
    }

    // Darauf kann aus anderen Activities per
    int var = MyStartActivity.myFirstGlobalVar;
    // zugegriffen werden
     
  11. Beni, 14.09.2010 #11
    Beni

    Beni Threadstarter Neuer Benutzer

    Beiträge:
    15
    Erhaltene Danke:
    0
    Registriert seit:
    13.09.2010
    Cool, danke :)

    Werde gleich die nächsten Stunden damit teste. Kann ich dann diese Variablen aus jeder Activity auch wieder ändern?

    Also wenn ich in der StartActivity eine Variable deklariert habe mit

    public static int myFirstGlobalVar = 1;

    Dann starte ich Activity1 und lese die Variable aus mit eben

    int var = StartActivity.myFirstGlobalVar;

    Kann ich die Variable dann auch wieder ändern und in der StartActivity speichern?

    also irgendwie so in Activity1:

    public static int myFirstGlobalVar = 1000;

    Dass wenn ich diese Variable anschliessend z.B. aus Activity2 aufrufe, sie nicht mehr 1 sondern 1000 ist?

     
  12. BenOtto, 14.09.2010 #12
    BenOtto

    BenOtto Android-Hilfe.de Mitglied

    Beiträge:
    141
    Erhaltene Danke:
    15
    Registriert seit:
    30.08.2010
    Um dein Hintergrundwissen mal ein bisschen zu erweitern: Also statische Variablen sind pro Klasse einmalig. Das heißt sie werden einmal angelegt, wenn die Klasse geladen wird. Wenn sie als public deklariert sind kann von jeder anderen Klasse auch darauf zugegriffen werden (vorausgesetzt sie kennt sie). Der Zugriff erfolgt per <Klassenname>.<Variablenname>.

    Und in der Tat, wie du schon sagtest, wenn der Wert von irgendwo geändert wird, dann ändert er sich auch für alle anderen, die auf die Variable zugreifen.
     
  13. Beni, 14.09.2010 #13
    Beni

    Beni Threadstarter Neuer Benutzer

    Beiträge:
    15
    Erhaltene Danke:
    0
    Registriert seit:
    13.09.2010
    Alles klar, vielen Dank :)

    Ich habe in der Ausbildung schon C++ programmiert und auch mal Hobbymässig ein wenig Java. Aber nie etwas grosses gemacht. Vor allem hatte ich noch nie mehrere Activitys, von dem her hab ich wohl noch ein Knoten, wie man da Werte hin und her schieben kann.

    Bin froh, wenn man hier Hilfe bekommt :) Desshalb nochmals an alle ein dickes Dankeschön!
     
  14. the_alien, 14.09.2010 #14
    the_alien

    the_alien Android-Lexikon

    Beiträge:
    1,559
    Erhaltene Danke:
    184
    Registriert seit:
    04.05.2009
    Nimm doch bitte Abstand von den globalen Variablen. Das ist ganz ganz schlechter Stil, macht es unübersichtlich und führt bei Änderungen schnell zu Fehlern.

    Wenn du wirklich globale Werte hast, die überall genutzt werden sollen, dann mach dir ne Klasse, die die Settings beinhaltet und wenn nötig auch in eine Properties-Datei oder Datenbank speichert.
    Wenn du es wirklich nur in der Activity brauchst, dann übergebe es als Parameter, sonst kannst du die Activity auch nicht anständig wiederverwenden.
     
  15. r4in, 16.09.2010 #15
    r4in

    r4in Android-Hilfe.de Mitglied

    Beiträge:
    88
    Erhaltene Danke:
    3
    Registriert seit:
    16.09.2010
    Hi Leute,

    wie ist es denn möglich eine Variable zu übergeben?
    In meinem Program will ich aus einem EditText in eine Variable schreiben und diese dann an ein zweites Activity übergeben.

    Hab schon ein paar Sachen gelesen von wegen Serializable machen und dann ans Activity schicken. Hmmm aber wie? Hab da auch nichts drüber im Netz gefunden.

    Wäre super wenn jemand einen Rat wüsste. Danke

    Sebastian
     
  16. the_alien, 16.09.2010 #16
    the_alien

    the_alien Android-Lexikon

    Beiträge:
    1,559
    Erhaltene Danke:
    184
    Registriert seit:
    04.05.2009
    Aus dem EditText kannste nen String kriegen und der ist serialisierbar.
     
  17. r4in, 16.09.2010 #17
    r4in

    r4in Android-Hilfe.de Mitglied

    Beiträge:
    88
    Erhaltene Danke:
    3
    Registriert seit:
    16.09.2010
    Ja, danke habs gerade rausgefunden, hab zu kompliziert gedacht.

    Trotzdem vielen Dank!
     
  18. einsiedler, 06.01.2016 #18
    einsiedler

    einsiedler Neuer Benutzer

    Beiträge:
    12
    Erhaltene Danke:
    0
    Registriert seit:
    06.01.2016
    ich hab da auch mal ne frage, ich blicke irgendwie nicht mehr durch:( ich habe meine main activity und meine zweite activity. Ich will über einen Button die zweite activity starten und in dieser dann per click auf einen button dessen beschriftung als zahl immer um 1 erhöhen. soweit so gut, kein problem. Jetzt will ich aber über einen zurück button den wert dieses textes als integer an die main activity übergeben. Was muss ich da machen?
     
  19. Feuerstern, 06.01.2016 #19
    Feuerstern

    Feuerstern Android-Hilfe.de Mitglied

    Beiträge:
    126
    Erhaltene Danke:
    14
    Registriert seit:
    25.10.2013

Diese Seite empfehlen