2016-12-13 3 views
3

ich in Android Studio arbeite ein Ich bin mit einem WebView einer Web-Seite in meiner Anwendung zu behandeln. Ich möchte URL-Weiterleitungen innerhalb dieser Webseite verfolgen, damit ich zur nächsten Zeit zur nächsten Aktivität wechseln kann.Wie können überladene Methoden aus Gründen der Abwärtskompatibilität überschrieben werden, wenn eine davon veraltet ist?

Diese URL-Verfolgung kann durch Überschreiben der WebViewClient-Klassenmethode 'shouldOverrideUrlLoading' ausgeführt werden, damit ich eine neue Aktivität für eine bestimmte URL weiterleiten kann. Allerdings gibt es zwei Implementierungen von ‚shouldOverrideUrlLoading‘:

shouldOverrideUrlLoading(WebView view, String url) 
shouldOverrideUrlLoading(WebView view, WebResourceRequest request) 

von denen die erste (Methode endet String url) ist veraltet. Die zweite oben gezeigte Methode funktioniert nur über die API-Stufe 21 hinaus, wenn meine Anwendung auf die API-Stufe 15 und darüber hinaus ausgerichtet sein soll.

Ich verstehe, wenn dies nur Standard-Code war (nicht Methode überschreiben) Ich konnte die API-Ebene aus dem Android-Telefon ziehen und dann je nach Methode auf der abgerufenen Ebene ausführen. Aber ich bin nicht sicher, wie diese überladenen Methoden für den Benutzer basierend auf API-Ebene des Telefons angeben.

Auch werde ich ein rot mir verschnörkele die Warnung ein Anruf erfordert API-Level 21, aber ich glaube, das wird noch kompilieren, stürzt nur, wenn 21 unter API genannt?

Im Folgenden sind die beiden Versionen der überschrieben überladene Methode:

Dies ist die veraltete Methode:

WebView myWebView = (WebView) findViewById(R.id.webview); 
    myWebView.setWebViewClient(new WebViewClient(){ 
     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
      if(url.equals("test")) { 
       return true; 
      } 
      return false; 
     } 
    }); 

Dies ist die neue Version des Verfahrens, in dem die ‚WebResourceRequest‘ wird nur in der API Level 21+:

Gibt es sowieso, um entweder anzugeben, welche Methode bei bestimmten API-Ebenen zu verwenden? Da ich nicht sicher bin, wie ich das ausführen kann, ohne die veraltete Methode zu verwenden.

Antwort

0

Sie können nur eine Bedingung überprüft Android-Version setzen.

how-can-i-check-the-system-version-of-android

Zusammenfassung:

if (android.os.Build.VERSION.SDK_INT>=android.os.Build.VERSION_CODES.LOLLIPOP) { // only for LOLLIPOP and newer versions }

Versuchen Sie immer neuere api zu verwenden, da sie dazu neigen, Fehler zu entfernen, aber wenn Sie alte veraltete Methoden wollen, können Sie immer Zustand versetzt.

1

Erstellen Sie einfach eine Methode, die beide Anruf.

So etwas wie dieses

public override bool ShouldOverrideUrlLoading(WebView view, string url) 
    { 
     return HandleUrlLoading(view,url); 
    } 

    public override bool ShouldOverrideUrlLoading(WebView view, IWebResourceRequest request) 
    { 
     string url = request.Url.ToString(); 
     return HandleUrlLoading(view, url); 
    } 

    private bool HandleUrlLoading(WebView view, string url) 
    { 
     if(url.equals("test")) { 
      return true; 
     } 
     return false; 
    } 
Verwandte Themen