AlertDialog löschen

  • Hallo =)

    Ich habe einen kleinen rechner und erzeuge dann nach der berechnung einen dialog mit dem ergebnis darin.
    das problem ist das nach dem "ok" klick und der eingabe neuer zahlen im dialog wo jetzt das ergebnis angezeigt wird, das alte ergebnis nicht das neue drin steht.
    das heißt ich müsste den dialog nach der berechnung löschen mit dann bei der erneuten berechnung ein neuer erzeugt wird.
    ich könnte das final der konstante löschen und nach dem ok oder abbrechen drücken dann die variable um 1 erhöhen das würde den effekt haben, aber das wäre nicht sauber oder?

    gibt es da irgendeine lösung?

  • Das stimmt - onCreateDialog wird nur einmal aufgerufen (dort solltest du den Builder erzeugen), aber du solltest deine Ausgabe in onPrepareDialog() aufbauen, dann erscheint auch der aktuelle Wert.

    Das Leben kann so hart sein, man muss nur richtig wollen!!!

  • und wie soll ich wenn ich im on create den builder erstell in der onprepare auf den builder zugreifen?

    dann müsst ich ne ja schon global definieren :o

    edit:
    das prepare setzt den text nicht

    Einmal editiert, zuletzt von Ben (14. März 2012 um 16:24)

  • Ja, du hast nur leider nur den Builder neu gemacht aber nicht den Dialog:

    Java
    protected void onPrepareDialog(int id, Dialog dialog) {		
    		CharSequence text = this.getResources().getString(R.string.berechnentext, ergebnis);
    		
    		builder.setMessage(text);
    
    
    		dialog = builder.create();
    	}

    Das Leben kann so hart sein, man muss nur richtig wollen!!!

  • was denn für einen Fehler??

    Aber es ist schon richtig, dass du den Dialog im onPrepareDialog anpassen musst, der wird nämlich jedesmal aufgerufen - der onCreateDialog nur einmal.

    Du kannst dir mit Log.v("meineActivity","Dialog erzeugt") bzw ..."Dialog vorbereitet"... anzeigen lassen, wann die beiden Methoden aufgerufen werden.

    Das Leben kann so hart sein, man muss nur richtig wollen!!!

  • ich habs nun so aber funktionieren tuts nicht.
    ein toast würde in der onPrepare aber gehen, schon getestet :o

    hab ich da einfach was total falsch verstanden?


  • Du hast im onPrepareDialog zwei Variablen vermischt: this.dialog und den Parameter dialog

    Du brauchst this.dialog gar nicht - den bekommst du ja als Parameter und musst ihn dort auch zurückgeben!!!

    Das Leben kann so hart sein, man muss nur richtig wollen!!!

  • hab das this rausgetan ok =)

    der typ der methode muss aber void sein und da kann ich kein return dialog schreiben :o

    nur return ändert leider auch nix

  • Die Methode heißt doch

    Java
    protected void onPrepareDialog(int id, Dialog dialog)

    Den dialog solltest du mal probieren - nicht this.dialog - einfach nur dialog...

    Wenn du Objekte übergeben bekommst, sind das Referenzen (hui - das schlimme Wort) und darum kannst du mit den Objekt-Inhalten arbeiten!!!

    Zitat aus der Doku:

    Zitat

    Before the dialog is displayed, Android also calls the optional callback method onPrepareDialog(int, Dialog). Define this method if you want to change any properties of the dialog each time it is opened. This method is called every time a dialog is opened, whereas onCreateDialog(int) is only called the very first time a dialog is opened. If you don't define onPrepareDialog(), then the dialog will remain the same as it was the previous time it was opened. This method is also passed the dialog's ID, along with the Dialog object you created in onCreateDialog().

    Das Leben kann so hart sein, man muss nur richtig wollen!!!

    Einmal editiert, zuletzt von UweApps (15. März 2012 um 22:59)

  • Kannst du es mal mit einer kürzeren Variante probieren?
    Du setzt nämlich zu vieles auf null und damit schießt du dir selber ins Knie...

    Zunächst solltest du in onPrepareDialog die erste if-Abfrage entfernen - die ergibt immer true, denn ein Objekt kann niemals equals(null) sein - dann wäre es ja kein Objekt und könnte equals nicht verstehen.

    Du wolltest eigentlich schreiben if (dialog != null) - aber das sollte auf keinen Fall sein, denn dann hast du keinen Dialog mehr, den du bearbeiten könntest.

    jetzt hab ich auch gesehen, warum dein dialog null ist: du hast auf den Buttons den dialog = null gesetzt - nimm das mal raus, bitte.

    Vielleicht hast du auch vergessen, das Ergebnis zu ändern - ich hab noch mal Log-Ausgaben eingebaut...

    Das Leben kann so hart sein, man muss nur richtig wollen!!!

    Einmal editiert, zuletzt von UweApps (15. März 2012 um 23:54)

  • mein dialog ist nie null, er gibt nur immer das selbe aus

    die if abfrage hab ich drin das das onprepare erst ausgeführt wird nachdem das erste oncreate aufgerufen wurde denn vorher ist dialog null

    und wie ich oben bereits sagte wird mit toast immer das aktuelle ergebnis ausgegeben nur im dialog steht das alte drin.

    auch wenn ich im prepare den builder den text neu zuweise ändert dies nix

  • Ich hab da auch wohl schon halb geschlafen - ich hab geschrieben, warum es nicht geht, aber dann doch versucht dagegen zu verstoßen... *mitkopfgegenwandrenn*

    Du bekommst im onPrepareDialog den dialog und darfst ihn benutzen, aber nicht ersetzen - und das hab ich getan mit dem "dialog =..."

    Ich hab mich noch mal in die API-Doku reingehängt und folgenden Vorschlag: Kannst du mal removeDialog(xxx) vor dem showDialog(xxx) einbauen??

    Das sollte eigentlich den alten Dialog löschen und showDialog muss sich dann einen neuen bauen mit onCreateDialog...

    Leider hab ich das selber noch nie wirklich ausprobiert. ?(

    Das Leben kann so hart sein, man muss nur richtig wollen!!!

  • LOL

    ich danke dir, aber auf diese idee hätte ich auch kommen können.
    ich hab immer geschaut ob es ein dialog.remove() oder ähnliches gibt aber removeDialog auf die idee kam ich natürlich nicht ^^

    die guten alten scheuklappen vor den augen *gg*

    problem also gelöst =)

  • Puh - das war eine schwere Geburt...

    Und anscheinend hat auch niemand sonst die Idee gehabt (oder warum habt ihr mich hier hängen lassen... *fg*) - jetzt sind viele Leute klüger.

    Danke für dein Problem!!!

    LG
    Uwe

    Das Leben kann so hart sein, man muss nur richtig wollen!!!

  • ich hab sowas auch schon in andern foren gelesen, aber die haben sich dann eigene dialoge geschrieben und keine alertdialoge genommen und das war mir doch schon ein wenig zu aufwendig für einen einfachen dialog xd

  • Hätte ich auch nicht erwartet, aber irgendwie optimiert Android da wieder irgendwas rum, so dass man zu solchen Tricks greifen muss.

    Ich hätte mir ein dialog.rebuild(builder.create()) gewünscht - gips aba nich...


    Kannst du bitte noch mal ganz unten auf der Seite "Problem gelöst" anklicken? Dann wird das im Forum auch angezeigt. ;)

    Das Leben kann so hart sein, man muss nur richtig wollen!!!

Jetzt mitmachen!

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