Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android使用Webview顯示頁面以及點擊跳轉startActivity問題

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

編輯:關於Android編程

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

直接奔入主題,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, 先這樣,還有什麼問題想知道的可以在下方評論。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved