アプリケーション内で、BrowserField を使用して Web サイトを表示しています。また、サイト内の各リンクが選択されたときに、ユーザーが空白にならないようにロード画面を表示する必要があります。
このメソッド内にロード画面を追加できました
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());
}
}
スレッドの外でもこれを試しました....それでも同じことが起こっています。テストのために、このメソッド内にダイアログを追加しましたが、サイト内のリンクをクリックすると同時にダイアログが表示されました。このロード画面だけはロードに時間がかかります。
これを実現する方法はありますか?
また、ブラウザー フィールドは、ネイティブ ブラウザーと比較して Web サイトの読み込みに少し時間がかかります。
私はここに何かが欠けています! 助けてください
あなたが提案したように、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);