解決webview多次載入,無法準確判斷頁面載入完成的問題
阿新 • • 發佈:2019-01-06
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;
}
}
}
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;
}
}
}