在Browserfield Blackberry中加载handleNavigationRequest内的屏幕
在我的应用程序中,我使用BrowserField显示一个网站。当网站内的每个链接被选中时,我需要显示加载屏幕,这样用户就不会感到空白 我能够在这个方法中添加加载屏幕在Browserfield Blackberry中加载handleNavigationRequest内的屏幕,blackberry,loading,browserfield,Blackberry,Loading,Browserfield,在我的应用程序中,我使用BrowserField显示一个网站。当网站内的每个链接被选中时,我需要显示加载屏幕,这样用户就不会感到空白 我能够在这个方法中添加加载屏幕 public void documentCreated(BrowserField browserField, ScriptEngine scriptEngine, Document document) 但问题是只有在建立连接时,才会调用此方法,因此在显示加载屏幕之前会有延迟
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());
}
}
我也在线外尝试了这个……仍然发生着同样的事情。为了进行测试,我在这个方法中添加了一个对话框,它是在我点击网站内任何链接的同时出现的。只有此加载屏幕需要时间加载
有什么办法可以做到这一点吗
此外,与本机浏览器相比,浏览器字段加载网站的时间稍长
我是不是错过了什么!请帮忙
我已经按照你的建议尝试了文档卸载方法。但它并没有被触发。下面给出的是代码片段,请您检查我在这里做错了什么
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);
我使用BrowserFieldListener来实现这一点(请参阅)。这有点违反直觉,但我在DocumentUnload()中显示加载屏幕,并在documentLoaded()中将其删除。当我第一次填充BrowserField时,我还按下加载屏幕,当带有BrowserField的屏幕关闭时,我确保加载屏幕也弹出。这不是一个很好的解决方案,但对我来说很有效 是的,一般来说,BrowserField比Browser慢。我还没有找到解决办法。然而,一个重要的方面是缓存。查找有关为BrowserField创建自己的缓存的信息-这里有一个线程,BB网站上有一篇KB文章。对不起,找不到自动取款机,我会在找到时更新 更新 正如OP所发现的,缓存文章是 进一步更新 我想澄清两件事:
谢谢彼得。。。!!我在BrowserFieldListener中尝试了documentCreated方法,这会在加载屏幕等待建立连接时造成一些延迟。我将按照您的建议尝试卸载文档。我也在本文之后实现了缓存,但在加载过程中仍然没有获得太多的性能提升。我希望这是你提到的那篇文章。我也试过了。但这一事件并没有被触发。我已经更新了我的问题,以包括我用于该问题的代码片段。你能检查一下吗!!用这个部分更新了问题。。!!我经历过,也尝试过这个。添加了这个并调试了代码;但是documentUnloading()方法不会用到它。但是documentCreated()和documentLoaded()方法被触发。。。我很困惑…:-(你知道为什么会这样吗?