2014-01-15 46 views
3

我想在eclipse中爲android做一個應用程序。我在那裏與webviews不同的片段。但我想在加載webview時顯示一個進度條,但我無法得到它如何做到這一點我檢查了很多教程,但沒有做到這一點。讓我在這裏大部分活動的代碼。進度條爲webview在片段視圖

import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.MenuInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.webkit.WebView; 
import android.webkit.WebViewClient; 
import android.app.Fragment; 
import android.annotation.SuppressLint; 
//import android.graphics.Bitmap; 
//import android.widget.ProgressBar; 
//import android.app.ProgressDialog; 
//import android.app.Activity; 


@SuppressLint("SetJavaScriptEnabled") 
public class AdminTab1 extends Fragment { 
    private WebView webView; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
     setHasOptionsMenu(true); 
     View rootView = inflater.inflate(R.layout.admintab1, container, false); 
    webView = (WebView) rootView.findViewById(R.id.webView1); 
    webView.setWebViewClient(new WebViewClient()); 
    webView.setScrollbarFadingEnabled(false); 
    webView.setHorizontalScrollBarEnabled(false); 
    webView.getSettings().setJavaScriptEnabled(true); 
    webView.getSettings().setUserAgentString("AndroidWebView"); 
    webView.clearCache(true); 
    webView.loadUrl("http://ww.google.com"); 
    return rootView; 
    } 

    @Override 
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
     super.onCreateOptionsMenu(menu, inflater); 
     inflater.inflate(R.menu.mainmenu, menu); 
    } 
    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
      case R.id.item1: 
       webView.reload(); 
       break; 
      case R.id.item2: 
       webView.goBack(); 
       break; 
      default: 
       break; 
     } 
     return true; 
    } 
} 

回答

1

WebViewClient有很多回調。例如,您應該將其子類化並覆蓋onPageStarted以顯示,並且onPageFinished將其解除。看看到DOC,here

private class MyWebClient extends WebViewClient { 
     @Override 
     public void onPageStarted(WebView view, String url, 
     // here show the dialog 
     } 
     public void onPageFinished(WebView view, String url) { 
     // here dismiss it 
     } 
} 

和onCreateView使用它像

webView.setWebViewClient(new MyWebClient()); 
+0

對不起,我是新與Android的發展。你能告訴我我該怎麼做?謝謝。 – user2966615

+0

@ user2966615查看文檔http://developer.android.com/reference/android/webkit/WebView.html – Raghunandan

+0

webView.setWebViewClient(new MyWebViewClient());或者webView.setWebViewClient(新的MyWebClient()); ??當然是 – user2966615

1

的OnCreate

@Override 
protected void onCreate(Bundle savedInstanceState) { 
// TODO Auto-generated method stub 
super.onCreate(savedInstanceState); 

this.requestWindowFeature(Window.FEATURE_NO_TITLE); 
setContentView(R.layout.web_view); 

web_view = (WebView) findViewById(R.id.web_view); 
pd = new ProgressDialog(Activity.this); 
pd.setMessage("Please wait Loading..."); 
pd.show(); 
web_view.setWebViewClient(new MyWebViewClient()); 
web_view.loadUrl("ur site name"); 
} 

WebViewClient

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

if (!pd.isShowing()) { 
    pd.show(); 
} 

return true; 
} 

@Override 
public void onPageFinished(WebView view, String url) { 
System.out.println("on finish"); 
if (pd.isShowing()) { 
    pd.dismiss(); 
} 
} 

通過這種方式,您可以在webview中實現進度對話框。

+0

ProgressDialog已被棄用,並且如果方向改變將導致窗口泄漏。 –

0

嘗試使用此方法獲得進展百分比

myWebView.setWebChromeClient(new WebChromeClient() { 
      public void onProgressChanged(WebView view, int progress) { 
       // Activities and WebViews measure progress with different 
       // scales 
       //Updaate progress bar here with progress int 
      } 

     }); 
3

你應該試試這個

public class About27Fragment extends Fragment{ 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ 
    View rootView = inflater.inflate(R.layout.about_27, container, false); 

    final WebView webView = (WebView) rootView.findViewById(R.id.webView_about27); 
    final ProgressDialog dialog = ProgressDialog.show(getActivity(), "", "Please wait, Loading Page...", true); 


    webView.getSettings().setJavaScriptEnabled(true); 
    webView.getSettings().setLoadWithOverviewMode(true); 
    webView.getSettings().setUseWideViewPort(true); 
    webView.getSettings().setBuiltInZoomControls(true); 

    webView.setWebViewClient(new WebViewClient() { 

     public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {} 

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

     @Override 
     public void onPageFinished(WebView view, String url){ 
      dialog.dismiss(); 
      String webUrl = webView.getUrl(); 
     } 


    }); 

    webView.loadUrl("https://www.google.com.mx"); 

    return rootView; 
} 

}

+0

我建議你給你的答案添加一些解釋。有時僅有代碼的答案可能足夠好,但代碼+解釋答案總是更好 – Barranka

+0

我說西班牙語,我的英語不好。但我嘗試說明。此表單用於在頁面更新,回退,轉發等時調用對話框。此窗體在啓用.getSettings的Activity的調用的片段中聲明webView時,請參閱webView上的頁面,更新頁面顯示對話框時使用setWebViewClient啓用對話框中的縮放,並消除完成加載。 –

+1

謝謝你,爲我工作。 –