2016-06-11 427 views
0

我試圖在shouldOverrideLoading上表示祝酒,但它永遠不會被調用。我的代碼非常龐大,所以我把它分解成小代碼,但仍然找不到我犯的錯誤。下面是代碼:爲什麼我的shouldOverrideLoading方法永遠不會被調用?

public class MainActivity extends Activity { 

private WebView webView; 
private EditText urlEditText; 
private ProgressBar progress; 

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

    urlEditText = (EditText) findViewById(R.id.urlField); 
    webView = (WebView) findViewById(R.id.webView); 
    webView.setWebChromeClient(new MyWebViewClient()); 
    CookieManager.getInstance().setAcceptCookie(true);// Enable Cookies 
    webView.getSettings().setJavaScriptEnabled(true);// Enable Java Script 
    webView.setWebViewClient(new ViewClient()); 

    webView.getSettings().setPluginState(PluginState.ON);// Enable Flash 

    webView.getSettings().setLoadsImagesAutomatically(true); 
    webView.setWebViewClient(new WebViewClient() {// ************************************ 
     // ON PAGE LOAD AND FINISHED 
     @Override 
     public void onPageStarted(WebView view, String url, Bitmap favicon) { 
      InputMethodManager imm = (InputMethodManager) getSystemService(// hide_keyboard 
      Context.INPUT_METHOD_SERVICE); 
      imm.hideSoftInputFromWindow(urlEditText.getWindowToken(), 0); 
      super.onPageStarted(view, url, favicon); 
     } 

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

     // **// 
     @Override 
     public void onReceivedError(WebView view, int errorCode, 
       String description, String failingUrl) { 
      Toast.makeText(getBaseContext(), "Pull down to refresh", 
        Toast.LENGTH_LONG).show(); 
      view.loadUrl("about:blank"); 
      super.onReceivedError(view, errorCode, description, failingUrl); 
     } 
    }); 
    progress = (ProgressBar) findViewById(R.id.progressBar); 
    progress.setMax(100); 
    // Use Done/search button in keyboard as go button 
    urlEditText = (EditText) findViewById(R.id.urlField); 
    urlEditText.setOnEditorActionListener(new OnEditorActionListener() { 
     public boolean onEditorAction(TextView arg0, int arg1, KeyEvent arg2) { 
      CustomSearch(); 
      return false; 
     } 
    }); 
} 

private class MyWebViewClient extends WebChromeClient { 
    @Override 
    public void onProgressChanged(WebView view, int newProgress) { 
     MainActivity.this.setValue(newProgress); 
     super.onProgressChanged(view, newProgress); 
    } 
} 

public void setValue(int progress) { 
    this.progress.setProgress(progress); 
} 

class ViewClient extends WebViewClient { 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView webview, String url) { 
     Toast.makeText(getBaseContext(), "page started", Toast.LENGTH_LONG) 
       .show(); 
     webview.loadUrl(url); 
     return true; 
    } 
} 

public void CustomSearch() { 
    // go button for searching worldwide 
    urlEditText = (EditText) findViewById(R.id.urlField); 
    String url = urlEditText.getText().toString(); 
    webView.loadUrl(url); 
} 

} 
+0

將'WebViewClient'設置爲'ViewClient'的實例後,可以使用替代ViewClient的匿名'WebViewClient'實例再次調用'setWebViewClient()'。 –

+0

對不起米奇,我很困惑 – MaggotSauceYumYum

+0

你在調用'setWebViewClient()'兩次。第二次「取消」第一次調用,因爲只能有一個「WebViewClient」,所以最終使用的「WebViewClient」沒有'shouldOverrideUrlLoading()'方法。得到它? –

回答

1

的問題是在這裏:

webView.setWebViewClient(new ViewClient()); 
webView.getSettings().setPluginState(PluginState.ON);// Enable Flash 
webView.getSettings().setLoadsImagesAutomatically(true); 
webView.setWebViewClient(new WebViewClient() { 
    // ... 
} 

首先,你傳遞一個ViewClient實例setWebViewClient(),然後,不使用過它,你用一個簡單的WebViewClient實例覆蓋它,那沒有你的覆蓋shouldOverrideLoading方法。

相關問題