2017-04-26 73 views
0

如果有人可以請嘗試這個簡單的示例並運行應用程序I會真的很感激它。加載url後,向下滾動一下,然後嘗試單擊一個橙色按鈕,其中顯示「TAKE ME THERE」,在兩個不同的設備中有兩種不同的行爲。在Nexus 5X中,它在同一Webview中加載目標,但在Galaxy Nexus API 22(Android 5.1.1)中,它會在默認的Android瀏覽器中打開目標。我希望我能夠傳達我的問題。我試圖尋找解決方案,但無法找到它。請幫忙!!!!!!!!!!!!!!!!我的android webview在「Nexus 5X API 25」的webview中加載頁面,但不在「Galaxy Nexus API 22(Android 5.1.1)」中加載「

package in.ac.cus.webview; 

import android.annotation.TargetApi; 
import android.content.Intent; 
import android.net.Uri; 
import android.os.Build; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.webkit.WebResourceRequest; 
import android.webkit.WebSettings; 
import android.webkit.WebView; 

public class MainActivity extends AppCompatActivity { 

private WebView myWebView; 

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

    //Webview initial setup procedure 
    myWebView = (WebView) findViewById(R.id.webview); 
    WebSettings websettings = myWebView.getSettings(); 
    websettings.setJavaScriptEnabled(true); 
    myWebView.loadUrl("http://library.cus.ac.in"); 
    myWebView.setWebViewClient(new WebViewClient()); 
} 

private class WebViewClient extends android.webkit.WebViewClient { 
    @SuppressWarnings("deprecation") 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 

      Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); 
      startActivity(intent); 
      return true; 
    } 
    @TargetApi(Build.VERSION_CODES.N) 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { 
     view.loadUrl(request.getUrl().toString()); 
     return true; 
    } 
} 

}

+1

當然是的。你覺得'startActivity(intent);'做了什麼? – njzk2

+0

我實際上是新的android sir/mam,所以我無法找出問題所在。但爲什麼在兩種不同的設備中有兩種不同的行爲?一個在同一個webview中打開,另一個在默認瀏覽器中打開..我想要在所有android設備上的相同webview中打開所有鏈接。請幫助我先生/ mam – user3304659

+0

請檢查以下問題http://stackoverflow.com/questions/42241452/ – sivaprakash

回答

0

public boolean shouldOverrideUrlLoading (WebView view, WebResourceRequest request)方法定位於Android N,至極爲7.xx 在你的其他shouldOverrideUrlLoading方法,你問到系統來處理網絡,全髖關節置換爲什麼它打開手機瀏覽器。你應該在兩種方法中都做同樣的事情。將給定的url加載到de webView中。

private class WebViewClient extends android.webkit.WebViewClient { 
    @SuppressWarnings("deprecation") 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     view.loadUrl(url); 
     return true; 
    } 
    @TargetApi(Build.VERSION_CODES.N) 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { 
     view.loadUrl(request.getUrl().toString()); 
     return true; 
    } 
} 
+0

Sir/mam即使我刪除了@TargetApi(Build.VERSION_CODES.N)行,它仍然給我相同的結果。 – user3304659

+0

非常感謝您的幫助。我想我已經解決了它。我已經刪除了方法public boolean shouldOverrideUrlLoading(WebView視圖,字符串url),並剛剛實現了方法public boolean shouldOverrideUrlLoading(WebView視圖,WebResourceRequest請求),最可能是我的解決方案。再次感謝您的及時回覆。 – user3304659

+0

最終,您需要實現其他方法,檢查WebViewClient在舊版本上的行爲,我不確定新方法是否適用於他們。 –