Подождите несколько секунд после onPageFinished

Я разработал приложение Webview. При загрузке WebView отображается экран-заставка в виде «Progressbar». Но я вижу заставку только 1 секунду, потому что заставка скрыта после успешной загрузки веб-просмотра. Загрузка очень быстрая, но я хочу увидеть заставку в течение 3 секунд. Как я могу реализовать это таким образом, чтобы заставка отображалась в течение минимум 3 секунд?

Основная деятельность:


public class MainActivity extends AppCompatActivity {

    String ShowOrHideWebViewInitialUse = "show";
    private WebView webview ;
    private ImageView spinner;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getDelegate().setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
        setContentView(R.layout.activity_main);

        webview =(WebView)findViewById(R.id.webView);
        spinner = (ImageView)findViewById(R.id.logo_id3);
        webview.setWebViewClient(new CustomWebViewClient());

        webview.getSettings().setJavaScriptEnabled(true);
        webview.getSettings().setDomStorageEnabled(true);
        webview.setOverScrollMode(WebView.OVER_SCROLL_NEVER);
        webview.loadUrl("xxxxxxxxxx");

    }
    boolean doubleBackToExitPressedOnce = false;

    @Override
    public void onBackPressed() {
        if (webview.canGoBack()){
            webview.goBack();
            Toast.makeText( this, "Going back inside a WebView", Toast.LENGTH_SHORT).show();
        }else {
            this.doubleBackToExitPressedOnce = true;
            Toast.makeText(this, "Doppelt zurück um zu beenden", Toast.LENGTH_SHORT).show();
        }

            if (doubleBackToExitPressedOnce) {
            super.onBackPressed();
            return;
        }



        new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
            @Override
            public void run() {
                // Your Code
                doubleBackToExitPressedOnce=false;
            }
        }, 2000);
    }

    // This allows for a splash screen
    // (and hide elements once the page loads)
    private class CustomWebViewClient extends WebViewClient {

        @Override
        public void onPageStarted(WebView webview, String url, Bitmap favicon) {

            // only make it invisible the FIRST time the app is run
            if (ShowOrHideWebViewInitialUse.equals("show")) {
                webview.setVisibility(webview.INVISIBLE);
            }
        }

        @Override
        public void onPageFinished(WebView view, String url) {

            ShowOrHideWebViewInitialUse = "hide";
            spinner.setVisibility(View.GONE);

            view.setVisibility(webview.VISIBLE);
            super.onPageFinished(view, url);

        }
    }
}
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
278
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

mWebView.setWebViewClient(new WebViewClient() {

   public void onPageFinished(WebView view, String url) {
        // Hide the splash here 
    }
}); 

пожалуйста, добавьте пояснение к вашему ответу

Joseph 20.12.2020 19:41

Вы должны скрыть всплеск, как только ссылка закончит загрузку URL-адреса.

Mahmoud Sallam 20.12.2020 20:58
Ответ принят как подходящий

В вашем случае вы можете отложить свой код следующим образом:

public void onPageFinished(WebView view, String url) {

    Thread.sleep(2000);

    ShowOrHideWebViewInitialUse = "hide";
    spinner.setVisibility(View.GONE);

    view.setVisibility(webview.VISIBLE);
    super.onPageFinished(view, url);

}

Единицей для 2000 являются миллисекунды. Итак, это приостановит поток на 2 секунды, а затем продолжит

Или используйте класс обработчика следующим образом:

public void onPageFinished(WebView view, String url) {

    new Handler().postDelayed(new Runnable() {

        @Override
        public void run() {
            ShowOrHideWebViewInitialUse = "hide";
            spinner.setVisibility(View.GONE);

            view.setVisibility(webview.VISIBLE);
            super.onPageFinished(view, url);

        }
    }, 2000);
}

Вы можете использовать обработчик с postDelayed

Здесь код в postDelayed будет выполняться через 3 секунды после вызова onPageFinished

@Override
public void onPageFinished(WebView view, String url) {
    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            ShowOrHideWebViewInitialUse = "hide";
            spinner.setVisibility(View.GONE);

            view.setVisibility(webview.VISIBLE);
            super.onPageFinished(view, url);

        }
    }, 3000); // 3 seconds (3000 millisec)
}

Другие вопросы по теме