Вызов «showDialog» из «onResume» вызывает исключение времени выполнения - PullRequest
1 голос
/ 06 марта 2012

У меня есть основное действие, которое запускает действие "экран загрузки".Когда «экран загрузки» заканчивается, мне нужно показать своего рода заставку, и, естественно, я выбрал для этого класс Dialog.Но когда я звоню по номеру showDialog из onResume, приложение не работает, хотя из всех связанных постов я понимаю, что это правильный способ сделать это.

Может кто-нибудь указать мне правильное направление?

Вот пример кода, если он помогает:

    @Override
    protected Dialog onCreateDialog(int id) {
        switch (id) {
        case DIALOG_SPLASH:
            promo = new PromoSplashScreen(getAppContext(), R.style.NoFrameNoBorderBoTitle);
            promo.setCancelable(false);
            promo.setImage(ApplicationData.config.splashImageURL);
            return promo;
        default:
            return super.onCreateDialog(id);
        }
    }
    @Override
    protected void onResume() {
        super.onResume();
        if (ApplicationData.config == null) return;
        if (ApplicationData.config.splashEnabled && !ApplicationData.config.splashPlayed && ApplicationData.config.splashImageURL != "") {
            // Play splash screen
            ApplicationData.config.splashPlayed = true;
            showDialog(DIALOG_SPLASH);
        }
    }

1 Ответ

2 голосов
/ 06 марта 2012

Кажется, что "getAppContext ()" является нулевым значением, когда вы вызываете его во время создания диалога.Это задокументировано в этой теме: Android: ProgressDialog.show () аварийно завершает работу с getApplicationContext

Чтобы обойти это, они использовали хак, в котором они используют поток, чтобы показать диалог после некоторогомиллисекунды возобновления деятельности.Таким образом, getAppContext не является нулевым, когда он вызывается.

...