Внутри своего приложения я показываю веб-сайт с помощью 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());
}
}
Я пробовал это и за пределами темы .... Все еще происходит то же самое. Для тестирования я добавил диалоговое окно внутри этого метода, и оно появлялось одновременно с тем, как я нажимаю любую ссылку на сайте. Только этот экран загрузки требует времени для загрузки.
Есть ли способ сделать это?
Кроме того, в поле браузера требуется немного больше времени для загрузки веб-сайта по сравнению с собственным браузером.
Я что-то здесь упускаю! Пожалуйста помоги
Я попробовал метод 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);