2017-03-06 102 views
6

我希望禁用正在加載到WebView對象的頁面的鏈接。我的代碼完全可以在我的模擬器上使用api 25,但不能在我的手機上使用23 api。禁用WebView鏈接在仿真器上工作,但在設備上無效

這是代碼塊我的WebView的鏈接:

public class NoLinksWebViewClient extends WebViewClient { 

    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { 
     return true; 
    } 
} 

我設置我的WebViewClient爲類型NoLinksWebViewClient的對象。它在模擬器上訣竅,但不是在我的真實手機上。

如何解決這個問題?

回答

-2

javafx.scene.Node.setDisable(boolean arg0)的一個選項嗎?你可以從塊元素那樣被人使用

Documentation

9

我的代碼工作完全在我的仿真器API 25,但不是我的手機上有23 API。

我認爲關鍵的區別不是模擬器vs設備,而是不同的API級別。 如果你看一下在WebViewClient的文檔,你會發現有兩個相似,但不同的方法:

// since API 24 
boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) 
// before API 24, now deprecated 
boolean shouldOverrideUrlLoading(WebView view, String url) 

正如你所覆蓋只有較新的方法,在您的舊設備的默認邏輯的作品。發生這種情況是因爲顯然API 23設備無法知道API 24中的方法將被替換爲不同的方法,因此它仍然會調用舊的(現在已棄用的)方法。

我相信要解決這個問題,你應該重寫這兩個方法。

3

簡短的回答是需要覆蓋這兩個給定below.The shouldOverrideUrlLoading方法(web視圖視圖,字符串URL)方法是在API 24棄用和shouldOverrideUrlLoading(web視圖視圖,WebResourceRequest請求)方法是添加到API 24中。

@SuppressWarnings("deprecation") 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     return true; 
    } 

    @TargetApi(Build.VERSION_CODES.N) 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { 
     return true; 
    } 

希望這些對您有所幫助。

相關問題