2010-07-19 9 views
6

webview가로드 된 후 대화 상자를 만들기 위해 코드에 필요한 것은 무엇입니까? dismiss()?webview를로드 한 후 진행 대화 상자를 닫으려면 어떻게해야합니까?

public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.main); 
      CookieSyncManager.createInstance(this); 
      CookieSyncManager.getInstance().startSync(); 
      webview = (WebView) findViewById(R.id.webview); 
      webview.setWebViewClient(new homeClient()); 
      webview.getSettings().setJavaScriptEnabled(true); 
      webview.getSettings().setPluginsEnabled(true); 
      webview.loadUrl("http://google.com"); 

      ProgressDialog pd = ProgressDialog.show(Home.this, "", 
        "Loading. Please wait...", true); 

     } 

I 작동하지 않았다

public void onPageFinshed(WebView view, String url){ 
     pd.dismiss(); 
    } 

을 시도했습니다.

+0

onPageFinished가 호출 되었습니까? UI 스레드에서? –

+0

죄송합니다. 처음부터이 작업을 수행 했어야합니다. 현재 클래스에 전체 클래스를 추가했습니다. 위로 스크롤하면 onPageFinshed를 시도한 것을 볼 수 있으며 작동하지 않습니다. 어쩌면 내가 한 방식이 틀렸어? 또는 내가 그것을 놓았던 곳? – brybam

답변

16

을 : webview.setWebViewClient O (새 homeClient()); 홈 클라이언트() ????

... 
... 
... 

webview = (WebView) findViewById(R.id.webview); 
webview.setWebViewClient(new WebViewClient() { 
      public boolean shouldOverrideUrlLoading(WebView view, String url) {    
       view.loadUrl(url); 
       return true; 
      } 


      public void onPageFinished(WebView view, String url) { 
       if (progressBar.isShowing()) { 
        progressBar.dismiss(); 
       } 
      } 
webview.loadUrl("http://www.google.com"); 

} 

업데이트를 시도 :: 이 좋은 예입니다.

Android WebView and the Indeterminant Progress Solution

+1

그 예가 트릭을했습니다. 고마워요! – brybam

+1

그게 전부 티켓! – Atma

1

pd에 액세스하는 방법은 onPageFinshed()입니까? (그리고 당신은 그것이 사실이라고 확신 페이지가로드 될 때?)에서

당신의 onCreate(), 대화 상자를 기각의 당신이 걸릴 수 homeClienthomeClient 않도록주의에 pd을 전달하려고합니다.

귀하의 homeClient은 다음과 같아야합니다

private class homeClient extends WebViewClient { 

    private ProgressDialog pd; 

    public homeClient(ProgressDialog pd) { 
     this.pd = pd; 
    } 

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

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

당신의 onCreate()에서 :

ProgressDialog pd = ProgressDialog.show(Fbook.this, "", 
       "Loading. Please wait...", true); 
webview.setWebViewClient(new homeClient(pd)); 
+0

아주 좋은 예, 나는 그것을 좋아한다! – IamStalker

+0

멋지다 ... 내가 지금 분 동안 놓친 부분. – MbaiMburu

3

이것은 OK입니다.

public class WordActivity extends Activity { 

    private WebView webview; 
    private ProgressDialog progressDialog; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.webview); 
     Bundle objetbunble = this.getIntent().getExtras(); 
     webview = (WebView) findViewById(R.id.webview); 

     final Activity activity = this; 

     webview.getSettings().setJavaScriptEnabled(true); 

     webview.setWebViewClient(new WebViewClient() { 
      public boolean shouldOverrideUrlLoading(WebView view, String url) {    
       view.loadUrl(url); 
       return true; 
      } 
      public void onLoadResource (WebView view, String url) { 
       if (progressDialog == null) { 
        progressDialog = new ProgressDialog(activity); 
        progressDialog.setMessage("Chargement en cours"); 
        progressDialog.show(); 
       } 
      } 
      public void onPageFinished(WebView view, String url) { 
       if (progressDialog.isShowing()) { 
        progressDialog.dismiss(); 
        progressDialog = null; 
       } 
      } 
     }); 
     webview.loadUrl("http://www.example.com"); 
    } 


} 
+0

안녕 사뮤엘 나는 모든 일이 잘 작동 초기 발사에 대한 webviews에 대한 UR 코드를 사용 해왔다. 그래서 내가 같은 웹 페이지를 탐색 할 때 두 번째 시간 progressdialog가 계속해서 페이지가 끝난 후에 표시됩니다 (참고 : 10 분 기다렸지 만 대화 상자가 닫히지 않았습니다). 어떻게 도와주세요. 미리 감사드립니다 ... –

3

@Jorgesys 이것은 100 % 정확하지 않습니다. 한 페이지에 여러 개의 iframe이있는 경우 여러 개의 onPageFinished (및 onPageStarted)가 있습니다. 리디렉션이 여러 개인 경우 실패 할 수도 있습니다.

boolean loadingFinished = true; 
boolean redirect = false; 

mWebView.setWebViewClient(new WebViewClient() { 

    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String urlNewString) { 
     if (!loadingFinished) { 
      redirect = true; 
     } 

    loadingFinished = false; 
    webView.loadUrl(urlNewString); 
    return true; 
    } 

    @Override 
    public void onPageStarted(WebView view, String url) { 
     loadingFinished = false; 
     //SHOW LOADING IF IT ISNT ALREADY VISIBLE 
    } 

    @Override 
    public void onPageFinished(WebView view, String url) { 
     if(!redirect){ 
      loadingFinished = true; 
     } 

     if(loadingFinished && !redirect){ 
     //HIDE LOADING IT HAS FINISHED 
     } else{ 
      redirect = false; 
     } 

    } 
}); 
0

당신은 단순히 웹보기에서 웹 페이지를로드하기 전에 진행을 표시 할 경우 : 내가 생각하는이 방법은 모든 문제를 해결합니다. 당신은 setContentView(R.layout.blahblah);

전에

getWindow().requestFeature(Window.FEATURE_PROGRESS); 

처럼 진행창 기능을 요청하고

final Activity context= this; 
webview.setWebChromeClient(new WebChromeClient() 
{ 
    public void onProgressChanged(WebView webView, int progress) 
    { 
    activity.setProgress(progress * 1000); 
    } 
}); 

처럼 onProgressChanged에서 진행 표시하고 추가 할 경우 당신은 해서 ProgressDialog를 소유 간단하게 할 수 있습니다 WebviewClient를 사용하십시오.

webView.setWebViewClient(new WebViewClient() { 
    ProgressDialog rogressDialog ; 
    @Override 
    public void onPageStarted(WebView view, String url, Bitmap bitmap) { 
     progressDialog = ProgressDialog.show(context, "Loading...", "Please wait...");//where context = YourActivity.this; 
     super.onPageStarted(view, url, bitmap); 
    } 

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

webView.loadUrl(url); 
0
wv1.setWebViewClient(new WebViewClient() { 
      public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { 
       Toast.makeText(Entertainment.this, description, Toast.LENGTH_SHORT).show(); 
      } 

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


      @Override 
      public void onPageFinished(WebView view, String url) { 
       progressDialog.dismiss(); 
       String webUrl = wv1.getUrl(); 

      } 

     }); 

    wv1.loadUrl(url); 

위의 코드는 웹보기에로 이동 들어오는 모든 링크에 대한 진행 대화 상자가 표시됩니다.