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?


  • 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


  • 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();
    	}
  • 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.

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

  • 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().

  • 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...


  • 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. ?(

  • 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

  • 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. ;)

Jetzt mitmachen!

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