Android ProgessBar при загрузке WebView

В моем приложении у меня есть WebView который загружает любой URL из Интернета. Теперь, иногда из-за медленных сетей, страница занимает много времени, и пользователь видит только пустой экран.

Я хочу показать ProgressBar пока WebView загружается и скрывает ProgessBar когда WebView загружается полностью.

Я знаю, как использовать ProgressBar и AsyncTask s, но вот моя проблема.

Это код, который я использую для загрузки моего WebView .

  mWebView = (WebView) findViewById(R.id.webview); mWebView.getSettings().setJavaScriptEnabled(true); mWebView.setWebViewClient(new HelloWebViewClient()); mWebView.loadUrl(web_URL); 

И этот мой собственный класс WebViewClient

 private class HelloWebViewClient extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } } 

Теперь, если я попытаюсь показать ProgressBar с помощью AsyncTask s, то, я думаю, мне нужно будет предоставить код для загрузки URL-адреса в функции doInBackGround() моей AsyncTask и показать прогресс через onProgressUpdate() .

Но как загрузить URL-адрес внутри doInBackground (), поскольку doInBackground () работает в потоке без UI, и я не смогу использовать mWebView.loadUrl(web_URL) внутри него.

Какие-либо предложения? Мне что-то не хватает? Пожалуйста, направляйте меня.

Solutions Collecting From Web of "Android ProgessBar при загрузке WebView"

Проверьте исходный код. Помогите вам решить вашу проблему …

 public class AppWebViewClients extends WebViewClient { private ProgressBar progressBar; public AppWebViewClients(ProgressBar progressBar) { this.progressBar=progressBar; progressBar.setVisibility(View.VISIBLE); } @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { // TODO Auto-generated method stub view.loadUrl(url); return true; } @Override public void onPageFinished(WebView view, String url) { // TODO Auto-generated method stub super.onPageFinished(view, url); progressBar.setVisibility(View.GONE); } } 

Я думаю, это поможет вам.

Благодарю.

Я хочу показать progressBar, пока webView загружается и скрывает progessBar, когда webView загружается полностью.

Следующий фрагмент поможет вам.

main.xml

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <WebView android:id="@+id/webview" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1" /> </LinearLayout> 

Main.class

 public class Main extends Activity { private WebView webview; private static final String TAG = "Main"; private ProgressDialog progressBar; /** Called when the activity is first created. */@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.main); this.webview = (WebView) findViewById(R.id.webview); WebSettings settings = webview.getSettings(); settings.setJavaScriptEnabled(true); webview.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY); final AlertDialog alertDialog = new AlertDialog.Builder(this).create(); progressBar = ProgressDialog.show(Main.this, "Showing ProgressDialog", "Loading..."); webview.setWebViewClient(new WebViewClient() { public boolean shouldOverrideUrlLoading(WebView view, String url) { Log.i(TAG, "Processing webview url click..."); view.loadUrl(url); return true; } public void onPageFinished(WebView view, String url) { Log.i(TAG, "Finished loading URL: " + url); if (progressBar.isShowing()) { progressBar.dismiss(); } } public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { Log.e(TAG, "Error: " + description); Toast.makeText(Main.this, "Oh no! " + description, Toast.LENGTH_SHORT).show(); alertDialog.setTitle("Error"); alertDialog.setMessage(description); alertDialog.setButton("OK", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { return; } }); alertDialog.show(); } }); webview.loadUrl("http://www.google.com"); } } 

Передайте свой url в этом методе

 private void startWebView(String url) { WebSettings settings = webView.getSettings(); settings.setJavaScriptEnabled(true); webView.setScrollBarStyle(View.SCROLLBARS_OUTSIDE_OVERLAY); webView.getSettings().setBuiltInZoomControls(true); webView.getSettings().setUseWideViewPort(true); webView.getSettings().setLoadWithOverviewMode(true); progressDialog = new ProgressDialog(ContestActivity.this); progressDialog.setMessage("Loading..."); progressDialog.show(); webView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } @Override public void onPageFinished(WebView view, String url) { if (progressDialog.isShowing()) { progressDialog.dismiss(); } } @Override public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { Toast.makeText(ContestActivity.this, "Error:" + description, Toast.LENGTH_SHORT).show(); } }); webView.loadUrl(url); } 
  myThanh.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY); final AlertDialog alertDialog = new AlertDialog.Builder(this).create(); progressBar = ProgressDialog.show(MainActivity.this,"Đang tải dữ liệu", "Vui lòng chờ..."); myThanh.setWebViewClient(new WebViewClient() { public void onPageFinished(WebView view, String url) { if (progressBar.isShowing()) { progressBar.dismiss(); } } }); 

Это простое решение работало для меня в KOTLIN :

 private fun setupWebView() { val webViewClient: WebViewClient = object: WebViewClient() { override fun shouldOverrideUrlLoading(view: WebView?, request: WebResourceRequest?): Boolean { view?.loadUrl(request?.url.toString()) return super.shouldOverrideUrlLoading(view, request) } override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) { showProgressDialog() super.onPageStarted(view, url, favicon) } override fun onPageFinished(view: WebView?, url: String?) { hideProgressDialog() super.onPageFinished(view, url) } } webView.webViewClient = webViewClient webView.settings.javaScriptEnabled = true webView.settings.defaultTextEncodingName = "utf-8" }