BlackBerry с использованием UIApplication с MainScreen - PullRequest
0 голосов
/ 27 января 2010

Я пытаюсь добавить поле браузера на главный экран. В настоящее время у меня есть:

public class BrowserFieldDemo extends UiApplication {

private MainScreen _browserScreen;
private BrowserField _bf2;
private BrowserFieldConfig _bfConfig;

public BrowserFieldDemo(final String url) {
    _browserScreen = new MainScreen();
    _bfConfig = new BrowserFieldConfig();
    _bfConfig.setProperty(BrowserFieldConfig.NAVIGATION_MODE,
            BrowserFieldConfig.NAVIGATION_MODE_POINTER);
    _bfConfig.setProperty(BrowserFieldConfig.JAVASCRIPT_ENABLED,
            Boolean.TRUE);
    _bf2 = new BrowserField(_bfConfig);
    _browserScreen.add(_bf2);

    invokeLater(new Runnable() {
        public void run() {
            _bf2.requestContent(url);
            pushScreen(_browserScreen);
        }
    });
}
}

Как правильно вставить браузер в класс Main Screen среди других элементов пользовательского интерфейса? Например, добавить (myBrowserField)? Я не уверен, как настроить класс BrowserFieldDemo для этого, потому что мне нужно расширить UIApplication для потока ...

public class LoginScreen extends MainScreen implements FieldChangeListener{}

Спасибо!


Обновление:

Теперь у меня есть следующее:

public class LoginBrowserField extends Thread {

    private LoginScreen loginScreen;
    private String url;

    public LoginBrowserField(String url, LoginScreen loginScreen) {
        this.loginScreen = loginScreen;
        this.url = url;
    }

    public void run() {
       synchronized (UiApplication.getEventLock()) {
        loginScreen.changeURL(url);
       }
    }
}

public class LoginScreen extends MainScreen implements FieldChangeListener {

     public void changeURL(final String url) {
        _bf2.requestContent(url);
        _bf2.setFocus();
     }

}

И чтобы запустить браузер, я звоню (в LoginScreen):

LoginBrowserField browser = new LoginBrowserField(url, this);
browser.start();

Однако я не уверен, что мои настройки выше верны, потому что браузеру требуется очень много времени для отображения в приложении, и он не может правильно разрешить мой URL. Вы видите что-нибудь не так?

Спасибо!

1 Ответ

2 голосов
/ 27 января 2010

Если вам нужен новый поток для запуска кода в фоновом режиме (т.е. загрузка данных через HTTP), вы можете просто создать новый объект Thread и запустить его () - для этого не нужно создавать подкласс UiApplication.

С другой стороны, если вам нужно запланировать запуск некоторого кода в потоке обработчика событий (например, pushScreen), вы можете использовать UiApplication.getUiApplication() для получения экземпляра UiApplication, например:

UiApplication.getUiApplication().invokeLater(new Runnable() {
    public void run() {
        pushScreen(_browserScreen);
    }
});
...