Почему индикатор прогресса в веб-представлении отображается с задержкой в ​​Android 9.0? - PullRequest
1 голос
/ 07 мая 2019

Я новичок в Android, я разрабатываю приложение, которое содержит фрагменты. Один из фрагментов содержит WebView. Я использую ProgressBar, как это упоминается во многих руководствах для веб-просмотров, чтобы при загрузке страницы была анимация загрузки. Проблема в том, что когда я запускаю приложение и загружаю страницу в WebView (независимо от того, является ли это внешним устройством или эмулятором), индикатор выполнения появляется с небольшой задержкой (около 2 секунд), а не сразу после нажатия ссылки, например. Только незадолго до того, как новая страница начинает загружаться, она ненадолго появляется и снова исчезает по мере необходимости при загрузке страницы.

Я протестировал несколько версий Android, и он прекрасно работает на всех из них, кроме Android 9.0

Вот мой WebViewClient класс, который я использую для моего webView:

private class MyWebviewClient extends WebViewClient {

        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            webProgress.setVisibility(View.VISIBLE);
        }

        @Override
        public void onPageFinished(WebView view, String url) {
            webProgress.setVisibility(View.GONE);
        }

    }

А вот мой файл макета xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <WebView
        android:id="@+id/webview"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <ProgressBar
        android:id="@+id/progressBar"
        style="?android:attr/progressBarStyle"
        android:layout_centerInParent="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />


</RelativeLayout>

Я просто не могу понять, что я делаю неправильно.

Ответы [ 2 ]

0 голосов
/ 22 мая 2019

Я обнаружил, что изменилось поведение между старой версией Webview и более новой версией Webview.

enter image description here

старая версия Webview вызывает onPageStart при первом шаге, но более новая версия (я тестирую на 74) вызывает onPageStart при шаге «Ожидание».

Поэтому измените код на OnProgressChanged, чтобы решить эту проблему.

0 голосов
/ 17 мая 2019

Я нашел ответ сам.Мне пришлось перезаписать mustOverrideUrlLoading () вместо onPageStarted (), чтобы ProgressBar отображался сразу после нажатия на ссылку, а не позже.

private class MyWebviewClient extends WebViewClient {

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            webProgress.setVisibility(View.VISIBLE);
            return super.shouldOverrideUrlLoading(view, url);
    }

        @Override
        public void onPageFinished(WebView view, String url) {
            webProgress.setVisibility(View.GONE);
        }

}
...