Как реализовать индикатор выполнения для onback () в Android WebView - PullRequest
0 голосов
/ 27 ноября 2018

У меня есть приложение для веб-просмотра, в котором индикатор выполнения отображается до тех пор, пока страница не загружается при переходе с одной страницы на другую, но не отображается при нажатии кнопки «Назад».Страница загружается из стека истории при нажатии кнопки назад.Любое решение для реализации ProgressBar для On ().

1 Ответ

0 голосов
/ 27 ноября 2018

Вам необходимо использовать onBackPressed()

  • Вызывается, когда активность обнаружила, что пользователь нажал клавишу возврата.Реализация по умолчанию просто завершает текущее действие, но вы можете переопределить это, чтобы сделать все, что вы хотите.

Затем отметьте onBackPressed(), что webView может перейти на предыдущую страницу, используя WebView.canGoBack()

- webView.canGoBack()Получает, имеет ли этот WebView элемент истории назад.

Если да, чем отображать progressBar еще раз, вызовите super.onBackPressed();

ОБРАЗЕЦ КОДА

import android.graphics.Bitmap;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ProgressBar;

public class MainActivity extends AppCompatActivity {


    WebView webView;
    ProgressBar progressBar;
    String url = "https://stackoverflow.com/users/7666442/nilesh-rathod?tab=profile";

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


        webView = (WebView) findViewById(R.id.web);
        webView.getSettings().setJavaScriptEnabled(true);
        webView.getSettings().setSupportZoom(true);
        webView.getSettings().setBuiltInZoomControls(true);
        webView.loadUrl(url);


        progressBar = (ProgressBar) findViewById(R.id.progressbar);
        progressBar.setMax(100);
        progressBar.setProgress(1);
        webView.setWebChromeClient(new WebChromeClient() {
            public void onProgressChanged(WebView view, int progress) {
                progressBar.setProgress(progress);
            }
        });
        webView.setWebViewClient(new WebViewClient() {

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


            }


            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return true;
            }

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

                progressBar.setVisibility(View.GONE);
            }
        });

    }

    @Override
    public void onBackPressed() {
        if(webView.canGoBack()){
            webView.goBack();
            progressBar.setProgress(1);
            progressBar.setVisibility(View.VISIBLE);
        }else {
            super.onBackPressed();
        }

    }
}

Layout.xml

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

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

    <ProgressBar
        android:layout_marginTop="-7dp"
        android:id="@+id/progressbar"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:background="@android:color/transparent"
        android:indeterminate="false"
        android:max="100"
        android:progress="1"/>

</RelativeLayout>
...