Загрузка, созданная ProgressDialog, не останавливается, как скрыть индикатор выполнения при загрузке страницы - PullRequest
1 голос
/ 13 июля 2020

Я новичок в Java и пытался создать приложение для просмотра веб-страниц. Виджет загрузки был создан с помощью диалога выполнения, но это не остановилось. Я не знаю, что не так. Пожалуйста, помогите.

public class MainActivity extends AppCompatActivity {
private WebView mywebView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    final ProgressDialog pd = ProgressDialog.show(this, "", "Loading...",true);
    mywebView = (WebView) findViewById(R.id.webview);
    mywebView.getSettings().setJavaScriptEnabled(true);
    mywebView.getSettings().setSupportZoom(true);
    mywebView.getSettings().setBuiltInZoomControls(true);
    mywebView.setWebViewClient(new WebViewClient() {
        @Override
        public void onPageFinished(WebView view, String url) {
            if(pd!=null && pd.isShowing())
            {
                pd.dismiss();
            }
        }
    });
    mywebView.loadUrl("https://google.com");
    mywebView.setWebViewClient(new WvClient());
}
private class WvClient extends WebViewClient
{
    @Override
    public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError er) {
        handler.proceed();
    }
}

@Override
public void onBackPressed() {
    if(mywebView.canGoBack())
    {
        mywebView.goBack();
    }
    else
    {
        super.onBackPressed();
    }
}

}

Ответы [ 2 ]

0 голосов
/ 13 июля 2020

Вы объявили setWebViewClient дважды, ie после загрузки URL-адреса вы снова объявили setWebViewClient своим собственным клиентом, правильный ответ:

    public class MainActivity extends AppCompatActivity {
    private WebView mywebView;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final ProgressDialog pd = ProgressDialog.show(this, "", "Loading...",true);
        mywebView = (WebView) findViewById(R.id.webview);
        mywebView.getSettings().setJavaScriptEnabled(true);
        mywebView.getSettings().setSupportZoom(true);
        mywebView.getSettings().setBuiltInZoomControls(true);
    webView.setWebViewClient(new WebViewClient() {
    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {
        super.onPageStarted(view, url, favicon);
        pd.show();
    }

    @Override
    public void onPageFinished(WebView view, String url) {
        super.onPageFinished(view, url);
        if(pd!=null && pd.isShowing())
            {
                pd.dismiss();
            }
    }

    @Override
    public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
        super.onReceivedError(view, request, error);
         if(pd!=null && pd.isShowing())
            {
                pd.dismiss();
            }
    }
});
        mywebView.loadUrl("https://google.com");
        
    }
   
    
    @Override
    public void onBackPressed() {
        if(mywebView.canGoBack())
        {
            mywebView.goBack();
        }
        else
        {
            super.onBackPressed();
        }
    }
    
    }
0 голосов
/ 13 июля 2020

Поместите точку останова в

onPageFinished

и посмотрите, действительно ли будет вызван слушатель?

...