Integer-wert einer Activity zur FragmentActivity übermitteln

  • Hallo leute,


    irgendwie schaffe ich es nicht, einen integer-wert von einer activity (PlaylistActivity) zur MainActivity zu übermitteln. Die PlaylistActivity beinhaltet eine klickbare Listview. Wenn auf eines der Elemente geklickt wird, soll dann dementsprechend der int-wert an die MainActivity übermittelt werden.


    Bin so vergegangen:



    In der MainActivity sollte der int-wert durch folgende Methode behandelt werden:


    jedoch kommt es mir vor, dass die Methode gar nicht aufgerufen wird. Im logcat bekomme ich auf jedenfall keinen Eintrag über den Parameter "INDEX:". Liegt es daran, dass die MainActvity eine FragmentActivity ist?


    Danke im Voraus für eure Hilfen und Ratschläge O:-)

  • Sieht nach einem typischen "You're doin' it wrong" aus.


    Java
    Intent i = new Intent(getApplicationContext(), MainActivity.class);
    i.putExtra("songID", songID);
    setResult(Activity.RESULT_OK, i);		
    finish();


    Du erstellst einen neuen Intent, machst da Dinge mit und beendest dann deine Activity.
    Dein neues Intent flattert also unbeachtet ins Nirvana.


    Anstatt einen neuen Intent zu holen solltest du lieber den aufrufenden Intent bearbeiten:

    Java
    Intent i = getIntent();
    i.putExtra("songID", songID);
    setResult(Activity.RESULT_OK, i);		
    finish();


    (Ja, getIntent() kann unter Umständen null zurückgeben, das musst du dann natürlich entsprechend abfangen.)

    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!«

  • Hi lucas,

    Zitat

    Dein neues Intent flattert also unbeachtet ins Nirvana.

    hmm, wieso denn? Die müsste doch im VOrdergrund sein.


    Also, bei meinem Fall handelt es sich um einen Musicplayer-app. Über einen
    button soll die Playlist angezeigt werden. Die musik läuft im
    Hintergrund fröhlich weiter, ok. Die MainActvity läuft (oder pausiert) im Hintergrund. Wird mit new Intent eine neue MainActvity erstellt und geöffnet, oder wird die alte von neuem ausgeführt? Es ist ja so, dass wenn eine activty nicht mehr im vordergrund ist, diese pausiert (auch gestoppt!?) wird. Aber wie soll ich über die Playlist die Musikstücke wechseln, wenn die MainActvity nicht im Vordergrund ist? Da bekäme ich eine Nullpointerexception.

  • Manchmal frage ich mich, woher ihr euer Grundlagenwissen nehmt und in welcher Art und Weise ihr eure Dokumentationen lest.


    Grundsätzlich und komplett losgelöst von Android bedeutet ein 'new' in Java genau das, was man erwartet: ein komplett neues und je nach gewähltem Konstruktor meist völlig leeres Objekt. Komplett neu und meist völlig leer. 'new' halt. Ungefähr so wie in 'Neuwagen', 'Neuigkeit', 'Neuerung', 'Neugier', 'erneuern' oder 'neumodisch'. Und halt ganz anders als 'Neuron', 'Neurose', 'Neunauge' oder 'pneumatisch'.


    Daraus folgt: new Intent() erstellt ein komplett neues, meist völlig leeres Intent.
    Und wenn du mir nicht glauben möchtest (das wäre natürlich dein gutes Recht), dann lies!

    Zitat

    Der unitäre new-Operator dient zum Erzeugen eines neuen Exemplars einer Klasse. Durch seine Verwendung wird ein neuer Speicherbereich belegt, der das neue Objekt aufnimmt.


    Ein Intent kommt erst dann in den Vordergrund, wenn du ihn via startActivity(Intent) startest. Das würde in deinem Fall dafür sorgen, dass sich eine neue Activity mit der selben Klasse deines MainActivityFragments vor dein sich im Hintergrund befindliches MainActivityFragment schiebt. Das Resultat für den Betrachter: seltsame Fehler, verschwundene Variablen etc.pp.


    Deine im Hintergrund befindliche Activity kommt zum Vorschein, wenn die im Vordergrund befindliche Activity via finish() beendet wird.


    Lange Rede kurzer Sinn: du willst keinen neuen Intent, sondern den aufrufenden Intent. Und den bekommst du in einer Activity via getIntent().
    getIntent() = hole Intent = nimm was Vorhandenes.
    new Intent() = neues Intent = erstell was Neues.

    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!«

  • die ListView wird durch einen button in einem Fragment aufgerufen (die app hat 2 fragmente, also zwei verschiedene views):


Jetzt mitmachen!

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