Проблемы с созданием всплывающего окна в Android Activity - PullRequest
52 голосов
/ 15 ноября 2010

Я пытаюсь создать всплывающее окно, которое появляется только при первом запуске приложения.Я хочу, чтобы он отображал некоторый текст и имел кнопку, чтобы закрыть всплывающее окно.Однако у меня проблемы с тем, чтобы заставить PopupWindow работать даже.Я попробовал два разных способа сделать это:

Во-первых, у меня есть файл XML, который объявляет макет всплывающего окна с именем popup.xml (текстовое представление внутри линейного слоя), и я добавил это в OnCreate() моей основной Деятельности:

PopupWindow pw = new PopupWindow(findViewById(R.id.popup), 100, 100, true);
    pw.showAtLocation(findViewById(R.id.main), Gravity.CENTER, 0, 0);

Во-вторых, я сделал то же самое с этим кодом:

final LayoutInflater inflater = (LayoutInflater)this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    PopupWindow pw = new PopupWindow(inflater.inflate(R.layout.popup, (ViewGroup) findViewById(R.layout.main) ), 100, 100, true);
    pw.showAtLocation(findViewById(R.id.main_page_layout), Gravity.CENTER, 0, 0);

Первая выдает исключение NullPointerException, а вторая выдает исключение BadTokenException и говорит «Unableдобавить окно - токен null недействителен "

Что в мире я делаю неправильно?Я очень новичок, поэтому, пожалуйста, потерпите меня.

Ответы [ 13 ]

0 голосов
/ 29 декабря 2014

Вы также можете попробовать использовать эту проверку:

  public void showPopupProgress (){
    new Handler().post(new Runnable() {
        @Override
        public void run() {
            if (getWindow().getDecorView().getWindowVisibility() == View.GONE) {
                showPopupProgress();
                return;
            }
            popup.showAtLocation(.....);
        }
    });
}
0 голосов
/ 28 февраля 2011

Вы можете указать смещение по оси Y для учета строки состояния с помощью метода pw.showAtLocation ...

0 голосов
/ 15 ноября 2010

Убедитесь, что findViewById что-то возвращает - возможно, вы вызываете это слишком рано, до того, как построен макет

Также вы можете опубликовать вывод logcat для исключений, которые вы получаете

...