在我的应用程序中,我使用BrowserField显示了一个网站。当网站内的每个链接被选择时,我需要显示加载屏幕,以便用户不会感到空白。
我能够在这个方法中添加加载屏幕
public void documentCreated(BrowserField browserField,
ScriptEngine scriptEngine, Document document)但问题是,只有在建立连接时,此方法才会被调用,因此在显示加载屏幕之前会有延迟。
因此,我尝试实现ProtocolController并在此方法中添加加载屏幕
public void handleNavigationRequest(BrowserFieldRequest request)但是,加载屏幕仍然会在一小段延迟后显示(与在documentCreated方法下相同)
这是我的代码片段
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方法。但它并没有被触发。下面给出的是代码片段,你能检查一下我在这里做错了什么吗...!!
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);发布于 2013-11-21 19:06:10
我使用BrowserFieldListener (参见BrowserFieldListener.html)来做这件事。这有点违反直觉,但我在documentUnloading()中显示加载屏幕,并在documentLoaded()中删除它。当我第一次填充BrowserField时,我也会按下加载屏幕,当带有BrowserField的屏幕关闭时,我会确保加载屏幕也会弹出。所以这不是一个很好的解决方案,但它对我来说很有效。
是的,一般来说,BrowserField比浏览器慢。我还没有找到绕过它的方法。然而,一个重要的方面是缓存。查找有关为BrowserField创建自己的缓存的信息-这里有线程,BB网站上有一篇知识库文章。对不起,找不到他们的自动取款机,我会随时更新的。
更新
正如OP所发现的,缓存项目是here。
进一步更新
我只想澄清两件事:
对于method.
这里包含了一个演示如何使用监听器的示例:listener sample
https://stackoverflow.com/questions/20115208
复制相似问题