0
您好我正試圖實現一個進度條到我的webview,等待web視圖加載時彈出。我已經看到了一些做法,但我不確定哪種做法是最好的。Android在加載url時向webview添加不確定的進度條
佈局:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<WebView
android:id="@+id/webview"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
</RelativeLayout>
我編程方式創建進度條!
活動:
public class MapActivity extends MenuActivity {
private final static String TAG = "HearingTest";
private WebView webView;
private String urlString;
private ProgressDialog progressDialog;
private Context context;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.map_layout);
urlString = getString(R.string.location_url);
WebViewSettings();
LoadWebPage(urlString);
AsyncTask<Void, Void, Void> task = new AsyncTask<Void, Void, Void>() {
@Override
protected void onPreExecute() {
progressDialog = new ProgressDialog(context);
progressDialog.setTitle("Loading...");
progressDialog.setMessage("Please wait.");
//progressDialog.setCancelable(false);
progressDialog.setIndeterminate(true);
progressDialog.show();
}
@Override
protected Void doInBackground(Void... arg0) {
try {
//Do something...
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void result) {
if (progressDialog!=null) {
progressDialog.dismiss();
}
}
};
task.execute((Void[])null);
}
public void LoadWebPage(String url){
try {
webView.loadUrl(url);
Log.d(TAG, "URL" + url + "connected");
}
catch (Exception e) {
Log.d(TAG, "URL: " + url + " couldn't connect.");
}
}
public void WebViewSettings(){
webView = (WebView) findViewById(R.id.webview);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setBuiltInZoomControls(true);
webView.getSettings().setSupportZoom(true);
webView.getSettings().setLoadWithOverviewMode(true);
webView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (Uri.parse(url).getHost().equals(urlString)) {
// This is my web site, so do not override; let my WebView load the page
return false;
}
// Otherwise, the link is not for a page on my site, so launch another Activity that handles URLs
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);
return true;
}
@Override
public void onReceivedSslError (WebView view, SslErrorHandler handler, SslError error) {
handler.proceed();
}
});
}
protected void DisplayProgressBar(){
}
}
我有問題是,我真的不知道什麼是最好的方式去這樣做是。我現在這樣做的方式,當我創建一個進度條的新實例時,我得到一個空指針異常,我找不到原因!另外,我不知道我是否以最好的方式做到這一點,因爲我已經看到了另一種使用線程的方式。
如果有人可以幫助我解決我的問題或告訴是一個更好的解決方案,將不勝感激。
輝煌感謝您的幫助獲得
NullPointerException
初始化
context
與context = MapActivity.this;
,新那將是很簡單的東西。 – Paddy1990另一件事是我真的不知道'protected void void addInBackground(Void ... arg0)'是用來做什麼的,因爲它沒有做任何事情,爲什麼這個方法需要? – Paddy1990
'doInBackground'是一個在後臺執行的異步任務。它用於執行可能需要很長時間才能完成的(背景)操作(例如:從服務器請求數據)。你可以在這裏閱讀更多的AsyncTask http://developer.android.com/reference/android/os/AsyncTask.html – JoelFernandes