Wie füge ich ein Nachrichtenfeld mit der Schaltfläche "OK" hinzu?

81

Ich möchte ein Meldungsfeld mit einer OK-Schaltfläche anzeigen. Ich habe den folgenden Code verwendet, aber er führt zu einem Kompilierungsfehler mit Argument:

AlertDialog.Builder dlgAlert  = new AlertDialog.Builder(this);
dlgAlert.setMessage("This is an alert with no consequence");
dlgAlert.setTitle("App Title");
dlgAlert.setPositiveButton("OK", null);
dlgAlert.setCancelable(true);
dlgAlert.create().show();

Wie soll ich ein Meldungsfeld in Android anzeigen?

Rajkumar Reddy
quelle
Irgendwie hat dein Code so funktioniert, wie er für mich ist. Möglicherweise haben meine SDK-Einstellungen <uses-sdk android:minSdkVersion="9" android:targetSdkVersion="15" />etwas damit zu tun, warum ich keinen von Ihnen vorgeschlagenen Kompilierungsfehler erhalten habe.
RBT

Antworten:

71

Ich denke, es kann ein Problem geben, dass Sie keinen Klick-Listener für die OK-Positiv-Schaltfläche hinzugefügt haben.

dlgAlert.setPositiveButton("Ok",
    new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) {
          //dismiss the dialog  
        }
    });
Paresh Mayani
quelle
30

Da Sie in Ihrer Situation den Benutzer nur mit einer kurzen und einfachen Nachricht benachrichtigen möchten, Toastwürde a zu einer besseren Benutzererfahrung führen.

Toast.makeText(getApplicationContext(), "Data saved", Toast.LENGTH_LONG).show();

Update: Anstelle eines Toast for Material Design-Apps wird jetzt eine Snackbar empfohlen.

Wenn Sie eine längere Nachricht haben, die Sie dem Leser Zeit zum Lesen und Verstehen geben möchten, sollten Sie a verwenden DialogFragment. (In der Dokumentation wird derzeit empfohlen, Ihr AlertDialogFragment in ein Fragment einzuschließen, anstatt es direkt aufzurufen.)

Machen Sie eine Klasse, die erweitert DialogFragment:

public class MyDialogFragment extends DialogFragment {
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {

        // Use the Builder class for convenient dialog construction
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        builder.setTitle("App Title");
        builder.setMessage("This is an alert with no consequence");
        builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {
                // You don't have to do anything here if you just 
                // want it dismissed when clicked
            }
        });

        // Create the AlertDialog object and return it
        return builder.create();
    }
}

Rufen Sie es dann auf, wenn Sie es für Ihre Aktivität benötigen:

DialogFragment dialog = new MyDialogFragment();
dialog.show(getSupportFragmentManager(), "MyDialogFragmentTag");

Siehe auch

Geben Sie hier die Bildbeschreibung ein

Suragch
quelle
Tolle Idee zum Toast. Für mich war der Import erforderlich: [android.widget.Toast importieren;]
AnthonyVO
9

Der Code ist für mich in Ordnung. Möglicherweise haben Sie vergessen, den Import hinzuzufügen:

import android.app.AlertDialog;

Wie auch immer, haben Sie ein gutes Tutorial hier .

FerranB
quelle
3
@Override
protected Dialog onCreateDialog(int id)
{
    switch(id)
    {
    case 0:
    {               
        return new AlertDialog.Builder(this)
        .setMessage("text here")
        .setPositiveButton("OK", new DialogInterface.OnClickListener() 
        {                   
            @Override
            public void onClick(DialogInterface arg0, int arg1) 
            {
                try
                {

                }//end try
                catch(Exception e)
                {
                    Toast.makeText(getBaseContext(),  "", Toast.LENGTH_LONG).show();
                }//end catch
            }//end onClick()
        }).create();                
    }//end case
  }//end switch
    return null;
}//end onCreateDialog
Ndupza
quelle