Alertdialog mit Button erweitern

  • 7 Antworten
  • Letztes Antwortdatum
H

haner

Ambitioniertes Mitglied
0
Nach dem Hinzufügen des Inhalts mehrerer edtitText-Felder in eine mysql-Datenbank öfnnet sich bei mir ein AlertDialog mit Titel und Message. Das funktioniert prima. Nun möchte ich diesen Dialog um einen Button erweitern und habe dafür folgenden, hier auskommentierten, Code hinzugefügt. Leider stürzt dann die App einfach ab. Warum?

BackgroundWorker.java
Code:
public class BackgroundWorker extends AsyncTask<String,Void,String> {
Context context;
AlertDialog alertDialog;
BackgroundWorker(Context ctx) {
    context = ctx;
}

@Override
protected String doInBackground(String... params) {
[...]
}

@Override
    protected void onPreExecute() {
        alertDialog = new AlertDialog.Builder(context).create();
        alertDialog.setTitle("Status");
    }

    @Override
    protected void onPostExecute(String result) {
        alertDialog.setMessage(result);
        /*
        alertDialog.setPositiveButton("Übersicht",
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        Intent intent = new Intent(getApplicationContext(), MainActivity.class);
                        startActivity(intent);
                    }
                });
        */
        alertDialog.show();
    }

}
 
Zuletzt bearbeitet:
Poste mal den Logcat von dem Crash.
 
Sorry aber leider läuft die App jetzt gar nicht mehr (Build failed).
Ursache ist wohl das hier:
error: cannot find symbol method getApplicationContext()
error: cannot find symbol method startActivity(Intent)
error: cannot find symbol method setPositiveButton(String,<anonymous OnClickListener>)
 
getApplicationContext und startActivity kannst du auf deinem context aufrufen.
setPositiveButton ist am Builder, nicht am Dialog. Ich empfehle dir alles am Builder zu machen, die Sachen zu mischen ist nicht so einfach und funktioniert nicht immer so wie man es will.
 
deek schrieb:
getApplicationContext und startActivity kannst du auf deinem context aufrufen.

Kannst du mir bitte genauer erklären was du damit meinst? Ich kann damit leider nichts anfangen...
 
Du hast in deinem BackgroundWorker doch ein Feld context. getApplicationContext und startActivity sind Instanzmethoden von Context. D.h. statt die einfach versuchen so aufzurufen, in einem AsyncTask der die nicht hat, rufst du die eben auf dem context auf den du ja eh als Feld zur Verfügung hast.
 
deek schrieb:
D.h. statt die einfach versuchen so aufzurufen, in einem AsyncTask der die nicht hat, rufst du die eben auf dem context auf den du ja eh als Feld zur Verfügung hast.

Ok, das mit dem auf dem context aufrufen habe ich nun verstanden.

Mein Code sieht nun so aus:
Code:
@Override
    protected void onPreExecute() {
    }

    @Override
    protected void onPostExecute(String result) {
        AlertDialog.Builder builder = new AlertDialog.Builder(context).create();
        builder.setTitle("Status");

        builder.setMessage(result);
        builder.setPositiveButton("Übersicht",
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {

                        Intent intent = new Intent(context, MainActivity.class);
                        context.startActivity(intent);
                    }
                });
        builder.show();
    }

Ein Fehler tritt nun ausschließlich in dieser Zeile (AlertDialog.Builder builder = new AlertDialog.Builder(context).create() ) auf.
Fehlermeldung:
Incompatible types:
Required: android.app.AlertDialog.Builder
Found: android.appAlertDialog
 
  • Danke
Reaktionen: haner, lordzwieback und deek
Zurück
Oben Unten