2013-05-31 80 views
10

我一直試圖在webview中加載頁面時將進度對話框合併到我的應用程序中,因此不僅有空白的白色屏幕。我知道這個問題在任何地方都可以發佈,但我似乎無法弄清楚任何對我有用的東西。我對編程和android工作很陌生,所以任何信息都會有幫助。以下是我目前擁有的代碼。隨着onPageStarted我得到一個編譯錯誤的位圖,我不知道是什麼問題。謝謝。在webview中添加進度對話框

public class Grades extends Activity{ 

@Override 
protected void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 


    //requesting system settings 

    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    getWindow().requestFeature(Window.FEATURE_PROGRESS); 
    WebView webview = new WebView(this); 

    //web settings 

    WebSettings webSettings = webview.getSettings(); 
     webSettings.setJavaScriptEnabled(true); 
     webSettings.setDisplayZoomControls(true); 
     webSettings.setBuiltInZoomControls(true); 


    setContentView(webview); 

    //loads webpages in webview instead of launching browser 

    webview.setWebViewClient(new WebViewClient() { 
      ProgressDialog prDialog; 
      @Override 
      public void onPageStarted(WebView view, String url, Bitmap favicon) { 
       prDialog = ProgressDialog.show(Grades.this, null, "loading, please wait..."); 
       super.onPageStarted(view, url, favicon); 
      } 

      @Override 
      public void onPageFinished(WebView view, String url) { 
       prDialog.dismiss(); 
       super.onPageFinished(view, url); 
      } 
     }); 

    //loading webpage 
    webview.loadUrl("page__link"); 
} 
+0

你得到了什麼錯誤? – Oam

+0

我現在遇到的錯誤是,在出現對話框後,一旦頁面被加載後它不會消失。 – bigC5012

+1

使用構建方式,請參閱http://stackoverflow.com/a/31826829/3496570 – Nepster

回答

27

檢查這個代碼,

final ProgressDialog pd = ProgressDialog.show(OnlinePaymentActivity.this, "", "Please wait, your transaction is being processed...", true); 

      mWebview = (WebView)findViewById(R.id.webView1); 

       mWebview.getSettings().setJavaScriptEnabled(true); // enable javascript 

       mWebview.getSettings().setLoadWithOverviewMode(true); 
       mWebview.getSettings().setUseWideViewPort(true); 
       mWebview.getSettings().setBuiltInZoomControls(true); 


       mWebview.setWebViewClient(new WebViewClient() { 
        public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { 
         Toast.makeText(activity, description, Toast.LENGTH_SHORT).show(); 
        } 

        @Override 
        public void onPageStarted(WebView view, String url, Bitmap favicon) 
        { 
         pd.show(); 
        } 


        @Override 
        public void onPageFinished(WebView view, String url) { 
         pd.dismiss(); 

          String webUrl = mWebview.getUrl(); 

          } 

} 

        }); 

       mWebview .loadUrl("www.google.com"); 
+1

我很感謝你的回答。一切都很好! – bigC5012

0

試試這個,我希望,這是你所追求的

webview.setWebChromeClient(new WebChromeClient() { 
     public void onProgressChanged(WebView view, int progress) { 
      //Also you can show the progress percentage using integer value 'progress' 
      if(!prDialog.isShowing()){ 
      prDialog = ProgressDialog.show(Grades.this, null, "loading, please wait..."); 
      } 


      if (progress == 100&&prDialog.isShowing()) { 
       prDialog.dismiss(); 
      } 
     } 
    }); 
+0

Doesnot適合我。 –

+0

我們使用WebView在我們自己的應用中加載網頁,而不是導航到Chrome瀏覽器。這是一個錯誤的方法。 –

3

網頁視圖與進度對話框爲我工作。全部工作代碼

import android.app.ProgressDialog; 
import android.graphics.Bitmap; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.webkit.WebSettings; 
import android.webkit.WebView; 
import android.webkit.WebViewClient; 

import com.yubrajpoudel.R; 

/** 
* Created by yubraj on 12/25/15. 
*/ 
public class NewsActivity extends AppCompatActivity { 
    private WebView webView; 
    ProgressDialog prDialog; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.page_news); 
     setSupportActionBar((Toolbar) findViewById(R.id.toolbar)); 

     webView = (WebView) findViewById(R.id.wv_news); 
     webView.setWebViewClient(new MyWebViewClient()); 

     String url = "http://google.com/"; 
     webView.getSettings().setJavaScriptEnabled(true); 
     webView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); 
     webView.loadUrl(url); 


    } 

    private class MyWebViewClient 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(NewsActivity.this); 
      prDialog.setMessage("Please wait ..."); 
      prDialog.show(); 
     } 

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