【发布时间】:2013-11-21 07:49:01
【问题描述】:
在我的应用程序中,我正在使用 BrowserField 显示一个网站。当网站内的每个链接都被选中时,我需要显示加载屏幕,这样用户就不会感到空白。
我能够在这个方法中添加加载屏幕
public void documentCreated(BrowserField browserField,
ScriptEngine scriptEngine, Document document)
但问题是只有在建立连接时才会调用这个方法,所以在显示加载屏幕之前会有延迟。
所以我尝试实现 ProtocolController 并在此方法中添加加载屏幕
public void handleNavigationRequest(BrowserFieldRequest request)
但是,加载屏幕仍然会在一小段延迟后显示(与在 documentCreated 方法下时相同)
这是我的代码 sn-p
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());
}
}
我也在线程之外尝试过这个......仍然发生同样的事情。为了进行测试,我在此方法中添加了一个对话框,它在我单击站点内的任何链接的同时出现。只有这个加载屏幕需要时间来加载。
有什么办法可以做到吗?
此外,与原生浏览器相比,浏览器字段加载网站所需的时间更长。
我在这里错过了什么吗!请帮忙
我已按照您的建议尝试了 documentUnloading 方法。但它没有被触发。下面给出的代码是sn-p,你能检查一下我在这里做错了什么吗......!!
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);
【问题讨论】:
标签: blackberry loading browserfield