Создаем свой dialog в Android (подвох в официальной документации)

    Решил создасть свой Dialog в andriod. Знания получал из официальной документации. Но, как оказалось здесь есть подвох. Если следовать рекомендациям из документации Creating a Custom Dialog, то всегда получаю ошибку:

    Caused by: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application

    ошибку вызывает метод:

    @Override
    protected Dialog onCreateDialog(int id) {
    Context mContext = getApplicationContext();
    Dialog dialog = new Dialog(mContext);

    dialog.setContentView(R.layout.quicklog);
    dialog.setTitle("Custom Dialog");
    TextView text = (TextView) dialog.findViewById(R.id.text);
    text.setText("Hello, this is a custom dialog!");

    return dialog;
    }


    Причина в том, что конструктору объекта Dialog передается не правильный контекст:

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


    Фиксится достаточно легко. Меняем getApplicationContext() на this:

    Dialog dialog = new Dialog(this);


    Думаю данную неточность исправят в документации позже, но будьте внимательны.
    Ads
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More

    Comments 2

      0
      А что значит «неправильный контекст»? Разве может быть другой Context в пределах текущего процесса?
        0
        Как я понял, Context может быть разный. Скажем, есть Context приложения (Application), а есть контекст одной активности (Activity). В нашем случае известно (из документации), что любой диалог показывается (запускается) в рамках текущей активности, соответственно объекту Dialog нужно получить объект Context для своего отображения, а мы ему передавали контекст приложения (getApplicationContext()) из-за чего получали ошибку: Unable to add window т.к. и в самом деле диалог запускается из текущей активности (т.е. из контекста активности), а не из контекста нашего приложения. Поправьте меня, если я не прав…

        Only users with full accounts can post comments. Log in, please.