1. 程式人生 > >解決webview多次載入,無法準確判斷頁面載入完成的問題

解決webview多次載入,無法準確判斷頁面載入完成的問題

package com.brian;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.drawable.GradientDrawable.Orientation;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.provider.Contacts.Organizations;
import android.provider.ContactsContract.CommonDataKinds.Organization;
import android.text.Layout;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.GridView;
import android.widget.HorizontalScrollView;
import android.widget.LinearLayout;

public class TestHpActivity2 extends Activity implements OnClickListener {
    protected static final String TAG = "TestHpActivity2";
    MyWebView webView;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main2);
        webView = (MyWebView) findViewById(R.id.webview);

        Button button1 = (Button) findViewById(R.id.button1);
        button1.setOnClickListener(this);
        Button button2 = (Button) findViewById(R.id.button2);
        button2.setOnClickListener(this);
        Button button3 = (Button) findViewById(R.id.button3);
        button3.setOnClickListener(this);
        Button button4 = (Button) findViewById(R.id.button4);
        button4.setOnClickListener(this);
        Button button5 = (Button) findViewById(R.id.button5);
        button5.setOnClickListener(this);
        Button button6 = (Button) findViewById(R.id.button6);
        button6.setOnClickListener(this);

        WebSettings webSettings = webView.getSettings();
        webSettings.setJavaScriptEnabled(true);
        webSettings.setAppCacheEnabled(false);
        webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);

        webView.setWebViewClient(new WebViewClient() {

            @Override
            public void onPageFinished(WebView view, String url) {
                Log.d(TAG, webView.getProgress() + ":" + view.getProgress()
                        + "onPageFinished URL" + url + "");
                Log.e(TAG,webView.isFocused()+ "onPageFinished URL" + url);
                super.onPageFinished(view, url);
            }

            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                // TODO Auto-generated method stub
                Log.i(TAG, "onPageStarted URL" + url);
                Log.i(TAG, "onPageStarted view" + view.getUrl());
                Log.i(TAG, "onPageStarted clickUrl" +clickUrl);
                isFlag=true;
                handler.sendEmptyMessage(1);
                super.onPageStarted(view, url, favicon);
            }

            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                // TODO Auto-generated method stub
                Log.i(TAG, "shouldOverrideUrlLoading URL" + url);
                return super.shouldOverrideUrlLoading(view, url);
            }

            @Override
            public void onReceivedError(WebView view, int errorCode,
                    String description, String failingUrl) {
                // TODO Auto-generated method stub
                super.onReceivedError(view, errorCode, description, failingUrl);
            }

        });
        webView.setWebChromeClient(new WebChromeClient() {

            @Override
            public void onProgressChanged(WebView view, int newProgress) {
                Log.d(TAG, webView.isFocused()+""+newProgress + "===" + view.getProgress()
                        + ":onProgressChanged URL" + view.getUrl());
                
                if (newProgress == 100) {
                    Log.e(TAG, webView.isFocusable()+":"+webView.isFocused()+"當前頁面載入到100:>>>>>>>>onProgressChanged URL"
                            + view.getUrl());
                        //lastPage();
                    // lastPage();
                }
                super.onProgressChanged(view, newProgress);
            }
        });
    }
    webviewAsyncTask webviewAsyncTask;
    Handler handler=new Handler(){

        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            switch (msg.what) {
            case 1:
                if(webviewAsyncTask==null){
                 webviewAsyncTask=new webviewAsyncTask();
                 webviewAsyncTask.execute();
                }
                break;

            default:
                break;
            }
            
        }
        
    };
    class webviewAsyncTask extends AsyncTask<Object, Integer, Object>{

        @Override
        protected Object doInBackground(Object... params) {
            runnable.run();
            return null;
        }
        
    }
    boolean isFlag=false;
    Runnable runnable=new Runnable() {
        
        @Override
        public void run() {
            Log.i(TAG, "開始Run"+getTaskId());
            while(isFlag){
                Log.i(TAG, "開始Run"+getTaskId()+";"+webView.getProgress());
                if(100==webView.getProgress()){
                    lastPage();
                    webviewAsyncTask=null;
                    isFlag=false;
                }
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    };
    
    public void lastPage() {
        Log.e(TAG, "最後一次顯示的介面才呼叫這句");
    }

    String clickUrl = "";

    @Override
    public void onClick(View v) {
        // webView.clearCache(true);
        Log.i(TAG, "----------stopLoading----------");
        webView.stopLoading();
        webView.clearFocus();
        webView.clearHistory();
        switch (v.getId()) {
        case R.id.button1:
            clickUrl = "http://www.sina.com";
            webView.loadUrl("http://www.sina.com");

            break;
        case R.id.button2:
            clickUrl = "http://www.sohu.com";
            webView.loadUrl("http://www.sohu.com");
            break;
        case R.id.button3:
            clickUrl = "http://www.51cto.com";
            webView.loadUrl("http://www.51cto.com");
            break;
        case R.id.button4:
            webView.loadUrl("http://www.qq.com");
            break;
        case R.id.button5:
            webView.loadUrl("http://www.163.com");
            break;
        case R.id.button6:
            webView.loadUrl("http://www.csdn.net");
            break;
        default:
            break;
        }
    }
}