为什么我的shouldOverrideLoading方法永远不会被调用?
问题描述:
我试图在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);
}
}
答
的问题是在这里:
webView.setWebViewClient(new ViewClient());
webView.getSettings().setPluginState(PluginState.ON);// Enable Flash
webView.getSettings().setLoadsImagesAutomatically(true);
webView.setWebViewClient(new WebViewClient() {
// ...
}
首先,你传递一个ViewClient
实例setWebViewClient()
,然后,不使用过它,你用一个简单的WebViewClient
实例覆盖它,那没有你的覆盖shouldOverrideLoading
方法。
将'WebViewClient'设置为'ViewClient'的实例后,可以使用替代ViewClient的匿名'WebViewClient'实例再次调用'setWebViewClient()'。 –
对不起米奇,我很困惑 – MaggotSauceYumYum
你在调用'setWebViewClient()'两次。第二次“取消”第一次调用,因为只能有一个“WebViewClient”,所以最终使用的“WebViewClient”没有'shouldOverrideUrlLoading()'方法。得到它? –