Проблема создания собственного диалога - PullRequest
1 голос
/ 30 декабря 2010

У меня проблема с созданием пользовательского диалога.Но я не нахожу неудачу.Надеюсь, кто-нибудь может мне помочь ...

protected Dialog onCreateDialog(int id) {
    Dialog dialog = null;
    switch (id) {
    case DIALOG_ABOUT_ID:
        dialog = buildAboutDialog();
        break;
    default:
        dialog = null;
    }
    return dialog;
}

...

public Dialog buildAboutDialog() {
    Context mContext = getApplicationContext();
    Dialog dialog = new Dialog(mContext);

    dialog.setContentView(R.layout.about_dialog);
    dialog.setTitle("About this application");

    return dialog;
}

Приводит к следующей ошибке:

12-30 19:27:02.593: ERROR/AndroidRuntime(383): android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application

Я проверил, возвращен ли диалог== ноль - но это не так.

Я также попробовал второй способ (инфлятор), описанный в http://developer.android.com/guide/topics/ui/dialogs.html#CustomDialog

Ответы [ 3 ]

3 голосов
/ 30 декабря 2010

Я обнаружил, что диалог должен быть создан с

Dialog dialog = new Dialog(this);

, а не

Context mContext = getApplicationContext();
Dialog dialog = new Dialog(mContext);

Я точно не знаю, почему.Может быть, кто-нибудь может мне это объяснить?

1 голос
/ 31 декабря 2010

Диалог диалог = новый диалог (контекст);dialog.setContentView (R.layout.help_content);

это работает для меня .. может быть getapplicationcontext не получает контекст вашего основного класса.

0 голосов
/ 04 июня 2013

Оказывается, контекст действия отличается от объекта, возвращаемого getApplicationContext (). Это можно проверить с помощью ведения журнала, просто выведите ActivityName.this и getApplicationContext.

Объект, возвращаемый getApplicationContext, является глобальным, в то время как контекст действия, ну, в общем, принадлежит только этому действию.

Log.e(tag,""+ getApplicationContext());
Log.e(tag,""+CustomDialogActivity.this);

где CustomDialogActivity - это мое действие, в котором я хочу показать свой диалог.

Для диалогов требуется контекст действия, а getApplicationContext () этого не обеспечивает. Как написано здесь (читай комментарии) контекст действия - это расширенный набор getApplicationContext (). Поэтому хорошо всегда передавать контекст действия, а не глобальный контекст.

Также, чтобы ответить на комментарий ffleandro на этой странице, если вы внутри onClick (), вы можете использовать ActivityName.this для обозначения активности. Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...