Blackberry: показать оповещение / статус / диалог рано и выйти - PullRequest
3 голосов
/ 08 августа 2011

Допустим, у меня есть типичное приложение Blackberry:

public class MyApp extends UiApplication {
    public static void main(String[] args) {
        MyApp app = new MyApp();
        app.enterEventDispatcher();
    }

    public MyApp() {
        pushScreen(new MyScreen());
    }    
}

и уже в начале я замечаю, что обязательное условие отсутствует (неправильные размеры дисплея; отсутствует SD-карта; некоторые ИТ-политики; и т. Д.)

Есть ли способ отобразить короткое и быстрое сообщение пользователю (в форме Alert / Status / Dialog / что угодно) и выйти сразу - без / до создания экземпляра сложного экрана / регистрации слушателей ускорения / установки сложного CleanupRunnable

Я пробовал Status.show () , Dialog.alert () - они не работают (RuntimeException "pushModalScreen, вызываемый потоком, не являющимся событием"):

public class MyScreen extends MainScreen {
    public MyScreen() {
        if (Display.getWidth() < 400) {
            Status.show("Goodbye");
            return;
        }
    }
}

Ответы [ 2 ]

2 голосов
/ 11 августа 2011

На самом деле следующее лучше, чем то, что предлагает Рафаэль, - потому что под ним нет уродливого белого экрана. Вот мой полный пример MyApp.java:

import net.rim.device.api.ui.*;
import net.rim.device.api.ui.component.*;
import net.rim.device.api.ui.container.*;
import net.rim.device.api.ui.decor.*;
import net.rim.device.api.system.*;
import net.rim.device.api.ui.image.*;

public class MyApp extends UiApplication {
    public static void main(String[] args) {
        MyApp app = new MyApp();
        app.enterEventDispatcher();
    }

    public MyApp() {
        pushScreen(new MyScreen());
    }    
}

class MyScreen extends MainScreen implements DialogClosedListener {
    Dialog myDialog = new Dialog(Dialog.OK, "Goodbye!", 0, Bitmap.getPredefinedBitmap(Bitmap.EXCLAMATION), Dialog.GLOBAL_STATUS);

    public MyScreen() {
        // XXX just some condition, like wrong dimensions or IT policy
        if (Display.getWidth() > 40) {
            myDialog.setDialogClosedListener(this);
            Application.getApplication().requestBackground();
            Application.getApplication().invokeLater(new Runnable() {
                public void run() {
                    myDialog.show();
                }
            });
            return;
        }

        // XXX heavy stuff to be skipped
    }

    public void dialogClosed(Dialog dialog, int choice) {
        if (dialog == myDialog) {
            System.out.println("XXX exiting XXX");
            System.exit(1);
        }
    }
}
2 голосов
/ 08 августа 2011

Вместо прямого вызова используйте invokeLater. Образец ниже:

Application.getApplication().invokeLater(new Runnable() {
    public void run() {
        Dialog.inform("Your message here...");
    }
});

Вместо Dialog.inform вы можете использовать Status.show ()

...