2016-06-11 5 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', вы вызываете 'setWebViewClient()' второй раз с анонимным экземпляром WebViewClient, который заменяет ваш 'ViewClient'. –

+0

Извините mikey, я в замешательстве – 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.

Смежные вопросы