2012-10-25 3 views
2

내가 내 응용 프로그램에서이 코드가 작동하지 않습니다웹보기의 shouldoverrideurlloading이

public class Home extends Activity{ 
@Override 
public void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.home); 
    final ProgressDialog progressBar; 
    if(isOnline()){ 
     WebView webView = (WebView) findViewById(R.id.home_web); 
     webView.setBackgroundColor(Color.parseColor(getString(R.color.colore_bg))); 
     webView.getSettings().setJavaScriptEnabled(true); 
     webView.getSettings().setBuiltInZoomControls(true); 
     webView.getSettings().setPluginsEnabled(true); 
     webView.setWebViewClient(new MyWebViewClient()); 
     progressBar = ProgressDialog.show(this,getString(R.string.caricamento),getString(R.string.attendere)); 
     webView.setWebViewClient(new WebViewClient(){ 
      public void onPageFinished(WebView view, String url) { 
       if (progressBar.isShowing()) { 
        progressBar.dismiss(); 
       } 
      } 
     }); 
     webView.loadUrl("http://www.mysite.com/android.php"); 
    }else{ 
     Toast.makeText(this,getString(R.string.no_connessione),Toast.LENGTH_LONG).show(); 
    } 
} 
private class MyWebViewClient extends WebViewClient { 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
      System.out.println("here"); 
     if (Uri.parse(url).getHost().equals("mysite.com")) { 
      // This is my web site, so do not override; let my WebView load the page 
      return false; 
     } 
     // Otherwise, the link is not for a page on my site, so launch another Activity that handles URLs 
     Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); 
     startActivity(intent); 
     return true; 
    } 
} 
public boolean isOnline(){ 
    ConnectivityManager cm=(ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo ni = cm.getActiveNetworkInfo(); 
    if(ni==null){ 
     return false; 
    } 
    return ni.isConnected(); 
} 
} 

가 shouldOverrideUrlLoading이 작동하지, 어느 쪽도 System.out에 인쇄하지 않습니다, 호출되지 않을 것으로 보인다. 어떻게 수리 할 수 ​​있습니까? 기본 브라우저에서 모든 링크 (기본 페이지 www.mysite.com/iphone.php 제외)를 열어야합니다.

답변

5

WebViewClient를 두 번 설정하여 첫 번째 웹 사이트 (shouldOverrideUrlLoading)를 두 번째 웹 사이트로 대체했습니다 (onPageFinished). 그것이 작동하는 두 가지를 결합 :

public class Home extends Activity{ 
private ProgressDialog progressBar; 

@Override 
public void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.home); 
    if(isOnline()){ 
     progressBar = ProgressDialog.show(this,getString(R.string.caricamento),getString(R.string.attendere)); 
     WebView webView = (WebView) findViewById(R.id.home_web); 
     webView.setBackgroundColor(Color.parseColor(getString(R.color.colore_bg))); 
     webView.getSettings().setJavaScriptEnabled(true); 
     webView.getSettings().setBuiltInZoomControls(true); 
     webView.getSettings().setPluginsEnabled(true); 
     webView.setWebViewClient(new MyWebViewClient()); 
     webView.loadUrl("http://www.mysite.com/android.php"); 
    }else{ 
     Toast.makeText(this,getString(R.string.no_connessione),Toast.LENGTH_LONG).show(); 
    } 
} 

private class MyWebViewClient extends WebViewClient { 

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

    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
      System.out.println("here"); 
     if (Uri.parse(url).getHost().equals("mysite.com")) { 
      // This is my web site, so do not override; let my WebView load the page 
      return false; 
     } 
     // Otherwise, the link is not for a page on my site, so launch another Activity that handles URLs 
     Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); 
     startActivity(intent); 
     return true; 
    } 
} 
} 

(나쁜 서식을 무시하십시오 : p)를

+0

디부 오! 네가 맞아! 하지만 지금은 새로운 onPage에서 완료되었습니다 progressBar가 인식되지 않습니다 – Zak

+0

아, 그게 진전이라고 선언 했으니까요 .Dialog를 작성 중입니다. 죄송합니다, 놓쳐 버렸습니다. 그것을 움직여 전역 변수가되고 황금이되게하십시오. 이를 반영하기 위해 원래의 대답을 수정했습니다. – jimmithy

+0

네, 진행 상황을 보여주기 위해 addo onPageStarted를했습니다. 그것은 작동합니다! 고마워. – Zak

관련 문제