Android使用Webview顯示頁面以及點擊跳轉StartActivity問題

來源:互聯網
上載者:User

標籤:

 

      以下是個人拙見,大神可直接忽略。

      直接奔入主題,android的一個webview控制項相信大家都特別熟悉了,可以用來載入顯示網頁,像商城的商品圖文詳情就可以用網頁很快實現,但是最近項目中遇到不一樣的問題,商品首頁用webview顯示,點擊某一個商品或者商品分類startactivity跳轉自身的介面,首頁混雜一部分網頁載入肯定會遇到介面顯示卡頓,顯示慢的問題,不過既然需求是這樣,也只能照做了。

      顯示一個網頁就不說了,首先,先最佳化一下顯示速度問題,也就是顯示文字和圖片的先後,在oncreate方法加上下面代碼:

    if (Build.VERSION.SDK_INT >= 19) {            mWebView.getSettings().setLoadsImagesAutomatically(true);        } else {            mWebView.getSettings().setLoadsImagesAutomatically(false);        }

  在WebViewClient中的onPageFinished方法加入:

if (!mWebView.getSettings().getLoadsImagesAutomatically()) {                mWebView.getSettings().setLoadsImagesAutomatically(true);            }

  由於可能導致網頁顯示錯誤,如果想自訂,在onReceivedError方法中載入自己在本地寫的html.

  

  其次就是要實現startActivity點擊跳轉android介面了,下面兩句話極其重要:

mWebView.getSettings().setJavaScriptEnabled(true);mWebView.addJavascriptInterface(new WebAppInterface(MyWebShopActivity.this), "startActivity");

  讓你的webview支援頁面js互動,其中"startActivity" 可以更改,和網頁js方法保持一致就行了,然後寫入你要點擊實現的效果了,要顯示一句話,或者跳轉介面等...

public class WebAppInterface {        Context mContext;        WebAppInterface(Context c) {            mContext = c;        }        @JavascriptInterface        public void jump_product_detail(final String id) {           //TODO 處理代碼        }    }

  我這裡就是下的跳轉點擊的商品,"jump_product_detail"和上面的"startActivity"一樣可以更改,也要保持一致。

  最後,在你自訂處理代碼中說一下可能遇到的問題,前端在做網頁的時候會加上每一個點擊的id,也就是標識,比如你載入時url是"https://www.baidu.com/" , 點擊後會變為"https://www.baidu.com/:01" 這樣多了id的url,可是這時webview會載入一次這個url,但是這個url是不存在的,所以我們就要重新載入一次原來的URL,注意這裡不能用mWebView.loadUrl(url)來載入了,看下面的log輸出就知道了:

java.lang.Throwable: Warning: A WebView method was called on thread ‘WebViewCoreThread‘. All WebView methods must be called on the UI thread. Future versions of WebView may not support use on other threads.

  處理方法就是改為:

mWebView.post(new Runnable() {    @Override    public void run() {        mWebView.loadUrl(url); //url為初始的值    }});

代替mWebView.loadUrl(url)來載入。

  同樣,在你用startActivity啟動介面時會出現錯誤Uncaught Error: Error calling method on NPObject,只需要修改為:

Handler mHandler = new Handler();    mHandler.post(new Runnable() {    @Override    public void run() {       startActivity(new Intent(action, uri));            });

就能較好的解決以上兩個容易出現的問題了。

ok, 先這樣,還有什麼問題想知道的可以在下方評論。

 

Android使用Webview顯示頁面以及點擊跳轉StartActivity問題

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.