首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Browserfield Blackberry中加载handleNavigationRequest中的屏幕

在Browserfield Blackberry中加载handleNavigationRequest中的屏幕
EN

Stack Overflow用户
提问于 2013-11-21 15:49:01
回答 1查看 162关注 0票数 0

在我的应用程序中,我使用BrowserField显示了一个网站。当网站内的每个链接被选择时,我需要显示加载屏幕,以便用户不会感到空白。

我能够在这个方法中添加加载屏幕

代码语言:javascript
复制
public void documentCreated(BrowserField browserField,
                            ScriptEngine scriptEngine, Document document)

但问题是,只有在建立连接时,此方法才会被调用,因此在显示加载屏幕之前会有延迟。

因此,我尝试实现ProtocolController并在此方法中添加加载屏幕

代码语言:javascript
复制
public void handleNavigationRequest(BrowserFieldRequest request)

但是,加载屏幕仍然会在一小段延迟后显示(与在documentCreated方法下相同)

这是我的代码片段

代码语言:javascript
复制
public void handleNavigationRequest(BrowserFieldRequest request)
            throws Exception {

        if (!NetworkUtil.isNetworkAvailable()) {
            Dialog.inform(Strings.NETWORK_ERROR);
        } else {

            UiApplication.getUiApplication().invokeAndWait(new Runnable() {
                 public void run() {
                     BaseScreen.showLoadingProgress(Strings.LOADING);
                 }
             });

            InputConnection ic = handleResourceRequest(request);
            browserField.displayContent(ic, request.getURL());
        }
    }

我以well....Still的身份在线程外尝试了这一点,也发生了同样的事情。为了测试,我在这个方法中添加了一个对话框,它是在我单击站点内的任何链接的同时出现的。只有这个加载屏幕需要时间来加载。

有没有办法做到这一点呢?

此外,与本机浏览器相比,浏览器字段加载网站所需的时间要长一些。

我是不是漏掉了什么!请帮帮忙

我已经按照您的建议尝试了documentUnloading方法。但它并没有被触发。下面给出的是代码片段,你能检查一下我在这里做错了什么吗...!!

代码语言:javascript
复制
protected void onUiEngineAttached(boolean attached) {
        if (attached) {

            BaseScreen.showLoadingProgress(Strings.LOADING);

        }
        super.onUiEngineAttached(attached);
    }

try {
                listener = new BrowserFieldListener() {

                    // Page starts loading...
                    public void documentCreated(BrowserField browserField,
                            ScriptEngine scriptEngine, Document document)
                             {

                        // show the loading screen
                        //showLoadingProgress(Strings.LOADING);
                    }

                    public void documentError(BrowserField browserField,
                            Document document)  {
                        hideLoadingProgress();
                        Dialog.inform(Strings.NETWORK_ERROR);
                    }

                    public void documentAborted(BrowserField browserField,
                            Document document) { 
                        hideLoadingProgress();
                        Dialog.inform(Strings.NETWORK_ERROR);
                    }

                    public void documentUnloading(BrowserField browserField,
                            Document document) {

                        BaseScreen.showLoadingProgress(Strings.LOADING);
                    }

                    // Page loaded
                    public void documentLoaded(BrowserField browserField,
                            Document document) {

                        // the document has loaded, hide loading popup ...
                        BaseScreen.hideLoadingProgress();
                    }

                };
            } catch (Exception ex) {
                Dialog.inform(Strings.NETWORK_ERROR);
            }

browserField.addListener(listener);
            // add the browser field to a ui manager or screen
            add(browserField);

            // request the content
            browserField.requestContent(URL);
EN

回答 1

Stack Overflow用户

发布于 2013-11-21 19:06:10

我使用BrowserFieldListener (参见BrowserFieldListener.html)来做这件事。这有点违反直觉,但我在documentUnloading()中显示加载屏幕,并在documentLoaded()中删除它。当我第一次填充BrowserField时,我也会按下加载屏幕,当带有BrowserField的屏幕关闭时,我会确保加载屏幕也会弹出。所以这不是一个很好的解决方案,但它对我来说很有效。

是的,一般来说,BrowserField比浏览器慢。我还没有找到绕过它的方法。然而,一个重要的方面是缓存。查找有关为BrowserField创建自己的缓存的信息-这里有线程,BB网站上有一篇知识库文章。对不起,找不到他们的自动取款机,我会随时更新的。

更新

正如OP所发现的,缓存项目是here

进一步更新

我只想澄清两件事:

对于method.

  • Assuming的初始加载,您必须使用addListener

  • 将侦听器与BrowserField相关联,您将需要自己推送加载屏幕,因为侦听器中将被调用的第一个方法(当然,假设它已经起作用)将是documentLoaded()。

这里包含了一个演示如何使用监听器的示例:listener sample

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20115208

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档