在我的应用程序中,我正在使用 BrowserField 显示一个网站。And when each link inside the site is selected, I need to show loading screen so that the user won't feel blank.
我能够在此方法中添加加载屏幕
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());
}
}
我也在线程之外尝试过这个......仍然发生同样的事情。为了进行测试,我在此方法中添加了一个对话框,它在我单击站点内的任何链接的同时出现。只有这个加载屏幕需要时间来加载。
有什么办法可以做到这一点?
此外,与本机浏览器相比,浏览器字段加载网站所需的时间更长。
我在这里错过了什么吗!请帮忙
我已经按照您的建议尝试了 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);