0

我正在尝试将浏览器字段添加到我的主屏幕上。目前,我有:

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);
        }
    });
}
}

将浏览器插入主屏幕类以及其他 UI 元素的正确方法是什么?例如,添加(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。你能看出有什么不对吗?

谢谢!

4

1 回答 1

2

如果您需要一个新线程来在后台运行代码(即通过 HTTP 加载数据),您可以创建一个新的 Thread 对象并 start() 它 - 无需为此子类化 UiApplication。

另一方面,如果你需要调度一些代码在事件处理线程中运行(比如pushScreen),你可以使用UiApplication.getUiApplication()来获取一个UiApplication的实例,例如:

UiApplication.getUiApplication().invokeLater(new Runnable() {
    public void run() {
        pushScreen(_browserScreen);
    }
});
于 2010-01-26T23:13:03.697 回答