Frage

Ich bin ein Alertdialog Validierung, und ich möchte einen Toast auf dem Display Alertdialog erhöhen.

Ich habe diesen Code, aber der Toast auf die Aktivität angezeigt

new AlertDialog.Builder(this).setTitle(R.string.contact_groups_add)
                .setView(addView).setPositiveButton(R.string.ok,
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog,
                                    int whichButton) {

                                if (wrapper.getTitle().length()>0)
                                {
                                    processAdd(wrapper);
                                } else {
                                    Toast.makeText(getApplicationContext(), "Name is required", Toast.LENGTH_SHORT).show();
                                }
                            }
                        }).setNegativeButton(R.string.cancel,
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog,
                                    int whichButton) {
                                // ignore, just dismiss
                            }
                        }).show();
War es hilfreich?

Lösung

Anstelle der Verwendung von AdvertDialog.Builder können Sie eine benutzerdefinierter Dialog , die wie ein Dialog verhalten, aber in Wirklichkeit eine normale Aktivität. Ihr Toast sollte in der Regel auf diesem gezogen werden.

Andere Tipps

Sie hat dieses Problem mich auch, wenn ich eine Bestätigungsnachricht innerhalb eines Dialoges zeigen wollte. Die Antwort, die seanhodges gab, ist wahrscheinlich die sauberere und bessere Weg. Aber eine separate Aktivität war nicht praktisch für mich, so dass ich mit dieser Lösung kam.

Wie auch immer, können Sie die AlerDialog.Builder verwenden und einen Toast zeigen. Wenn Sie die OnClickListener der Taste überschreiben die Sie den Toast auslösen möchten, können Sie einen Toast auf einem Dialog angezeigt.

Ein Beispiel;

public void showToastOnDialog(final Context context) {
    AlertDialog.Builder builder = new AlertDialog.Builder(context);
    builder.setTitle("Dialog title");
    builder.setMessage("Dialog message");
    builder.setPositiveButton(android.R.string.ok, new OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            // Do nothing, you will be overriding this anyway
        }
    });
    builder.setNegativeButton(android.R.string.cancel,
            new OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    // You can implement code here, because you wont be
                    // overriding this
                }
            });
    final AlertDialog dialog = builder.create();
    // Make sure you show the dialog first before overriding the
    // OnClickListener
    dialog.show();
    // Notice that I`m not using DialogInterface.OnClicklistener but the
    // View.OnClickListener
    dialog.getButton(Dialog.BUTTON_POSITIVE).setOnClickListener(
            new View.OnClickListener() {

                @Override
                public void onClick(View v) {

                    Toast toast = Toast.makeText(context,
                            "I`m a toast on top of a dialog.",
                            Toast.LENGTH_LONG);
                    toast.show();
                    // Because you are overriding the OnClicklistener, the
                    // dialog will not auto dismiss
                    // after clicking
                    dialog.dismiss();
                }
            });
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top