Вопрос

Я проверяю AlertDialog, и я хотел бы поднять тост в верхней части дисплея AlertDialog.

У меня есть этот код, но всплывающее окно отображается при выполнении действия

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();
Это было полезно?

Решение

Вместо использования AdvertDialog.Builder вы можете создать пользовательский диалог который будет вести себя как диалог, но на самом деле является обычным действием.Ваши тосты должны быть нарисованы поверх этого обычным образом.

Другие советы

У меня тоже была эта проблема, когда я хотел показать сообщение о проверке в диалоговом окне.Ответ, который дал шонходжес, вероятно, является более чистым и лучшим способом.Но отдельное действие было непрактичным для меня, поэтому я придумал это решение.

В любом случае, вы можете использовать AlerDialog.Builder и показать всплывающее окно.Если вы переопределите OnClickListener кнопки, на которой вы хотите запустить тост, вы можете отобразить тост поверх диалогового окна.

Пример;

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();
                }
            });
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top