2012-01-25 3 views
2

Проще говоря, как я могу сделать диалог прогресса отображаться каждый раз, когда в моем webview будет нажата новая ссылка. Я пробовал много учебников и методов, но каждый из них показывает диалог только один раз, когда приложение изначально загружается.Продвинутый диалог В Webview

Вот мой код

mWebView.setWebViewClient(new WebViewClient() { 

      @Override 
      public boolean shouldOverrideUrlLoading(WebView view, String url) 
      { 
       view.loadUrl(url); 
       return true; 
      } 
      ProgressDialog dialog = ProgressDialog.show(myActivity.this, "", 
          "Loading. Please wait...", true); 
      @Override 
      public void onPageFinished(WebView view, String url) { 
      dialog.dismiss(); 
      } 
+0

Было бы полезно, если бы вы могли бы указать, что вы пробовали уже. –

+0

Довольно много разговоров о StackOverflow об этом: здесь http://stackoverflow.com/questions/2537454/android-webview-progress-bar и здесь http://stackoverflow.com/questions/2496119/in-an-android -app-i-would-like-to-show-a-progress-bar-on-a-child-tab-до-w, например – nwaltham

+0

Я знаю, у людей возникают проблемы с ним повсюду. Моя проблема в том, что я не хочу, чтобы в заголовке был progressBar. Я могу легко создать диалог, если привязать его к onClickListener к кнопке. Я просто не знаю, как получить приложение, чтобы понять, когда URL страницы меняется и отображать диалоговое окно в этой точке. – Zach

ответ

3

Попробуйте это,

// Let's display the progress in the activity title bar, like the 
// browser app does. 
getWindow().requestFeature(Window.FEATURE_PROGRESS); 

webview.getSettings().setJavaScriptEnabled(true); 

final Activity activity = this; 
webview.setWebChromeClient(new WebChromeClient() { 
    public void onProgressChanged(WebView view, int progress) { 
    // Activities and WebViews measure progress with different scales. 
    // The progress meter will automatically disappear when we reach 100% 
    activity.setProgress(progress * 1000); 
    } 
}); 
webview.setWebViewClient(new WebViewClient() { 
    public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { 
    Toast.makeText(activity, "Oh no! " + description, Toast.LENGTH_SHORT).show(); 
    } 
}); 

webview.loadUrl("http://slashdot.org/"); 

И если вы хотите сделать свой собственный progressDialog затем

webView.setWebViewClient(new WebViewClient() { 

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

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

     //HIDE PROGRESS DIALOG LOADING IT HAS FINISHED 
     } 

    }); 

И дайте мне знать, что случилось ..

+0

У меня возникли проблемы с диалоговым окном прогресса в этом месте. Я добавил исходный код. Это единственный способ заставить его работать, но он запускается только при первом загрузке приложения. – Zach

+0

@ user1166556 - Вы ошибаетесь, создаете объект ProgressDialog в своей функции onCreate() и просто показываете его. in shouldOverrid ... и увольнять на страницеFinished() – user370305

5

проверить это:

wvCouponsAndOffers.setWebViewClient(new WebViewClient() { 
     ProgressDialog progressDialog = new ProgressDialog(CouponsWebViewUI.this); 

     @Override 
     public void onPageStarted(WebView view, String url, Bitmap favicon) { 
      super.onPageStarted(view, url, favicon); 
      progressDialog.setMessage(StringConstants.PROGRESS_DIALOG_MSG); 
      progressDialog.setCancelable(false); 
      progressDialog.setOnKeyListener(new OnKeyListener(){ 
       @Override 
       public boolean onKey(DialogInterface dialog, int keyCode, 
         KeyEvent event) { 
        if(keyCode == KeyEvent.KEYCODE_SEARCH) { 
         return true; 
        } 
        else 
         return false; 
       }}); 
      progressDialog.show(); 
     } 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
      progressDialog.setMessage(StringConstants.PROGRESS_DIALOG_MSG); 
      progressDialog.setCancelable(false); 
      progressDialog.setOnKeyListener(new OnKeyListener(){ 
       @Override 
       public boolean onKey(DialogInterface dialog, int keyCode, 
         KeyEvent event) { 
        if(keyCode == KeyEvent.KEYCODE_SEARCH) { 
         return true; 
        } 
        else 
         return false; 
       }}); 
      progressDialog.show(); 
      view.loadUrl(url); 
      return true; 
     } 

     public void onPageFinished(WebView view, String url) { 
      if (progressDialog.isShowing()) { 
       progressDialog.dismiss(); 
      } 
     } 

    }); 
0

Попробуйте это самый простой, он работает для меня

public class HomeWebViewActivity extends AppCompatActivity{ 

    private String weburl; 
    private WebView webview; 
    private Toolbar toolbar; 
    private ProgressDialog prDialog; 



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


     toolbar = (Toolbar) findViewById(R.id.toolbar_homewebview); 
     setSupportActionBar(toolbar); 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
     getSupportActionBar().setDisplayShowHomeEnabled(true); 


     weburl="ADD YOUR URL HERE"; 

     webview = (WebView) findViewById(R.id.webviewinfo); 
     webview.setWebViewClient(new WebVwClientcls()); 


     webview.getSettings().setJavaScriptEnabled(true); 
     webview.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); 
     webview.loadUrl(weburl); 


    } 

    private class WebVwClientcls extends WebViewClient { 

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

     @Override 
     public void onPageStarted(WebView view, String url, Bitmap favicon) { 
      super.onPageStarted(view, url, favicon); 
      prDialog = new ProgressDialog(HomeWebViewActivity.this); 
      prDialog.setMessage("Please wait ..."); 
      prDialog.show(); 
     } 

     @Override 
     public void onPageFinished(WebView view, String url) { 
      super.onPageFinished(view, url); 
      if(prDialog!=null){ 
       prDialog.dismiss(); 
      } 
     } 
    } 
} 
Смежные вопросы