Как поднять тост поверх AlertDialog? - PullRequest
2 голосов
/ 01 марта 2010

Я проверяю 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();

Ответы [ 2 ]

6 голосов
/ 01 марта 2010

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

3 голосов
/ 16 апреля 2012

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

В любом случае, вы можете использовать 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();
                }
            });
}
...