[英]Startup loading dialog Android WebView
我有一個使用WebView的Android應用程序。 在應用程序啟動時,它將檢查WebView是否可以連接到服務器。 如果可以連接,則沒有問題,該應用會立即加載,並且WebView會顯示該頁面。 但是,如果服務器不可用或連接不起作用,則顯示錯誤消息可能需要幾秒鍾(5-10)。 這是因為當您的連接速度較慢時,它不會連續顯示錯誤消息。
因此,如果沒有連接,您將看到黑屏約5-10秒。 我想要的只是在應用程序啟動時的簡單加載對話框。 這樣您就不會看到黑屏,並且人們知道該應用程序正在執行操作。 我如何用最簡單但有效的方法來歸檔呢?
謝謝!!
編輯:
好的,這就是我現在擁有的,我認為它正在運行,但這是正確的方法嗎? 是否可以在shouldOverideUrlLoading中使用此異步線程? 我怎樣才能做到這一點?
public class WebviewActivity extends MainActivity {
private WebView myWebView;
private ProgressDialog progressDialog;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.main);
final ScrollView mainScrollView = (ScrollView)findViewById(R.id.ScrollView01);
myWebView = (WebView)findViewById(R.id.webview);
WebSettings webSettings = myWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
progressDialog = ProgressDialog.show(WebviewActivity.this, "", "Loading...", true);
myWebView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
progressDialog.show();
if ( isOnline() == false || isOnlineHost() == false )
myWebView.loadUrl("file:///android_asset/errorpage.html");
else
view.loadUrl(url);
return true;
}
@Override
public void onPageFinished(WebView view, String url) {
progressDialog.dismiss();
mainScrollView.fullScroll(ScrollView.FOCUS_UP);
}
});
myWebView.requestFocus(View.FOCUS_DOWN);
myWebView.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_UP:
if (!v.hasFocus()) {
v.requestFocus();
}
break;
}
return false;
}
});
}
@Override
public void onConfigurationChanged(Configuration newConfig){
super.onConfigurationChanged(newConfig);
}
@Override
public void onResume() {
super.onResume();
new checkConnection().execute();
}
//DOING THE CONNECTION CHECK IN ANOTHER THREAD
public class checkConnection extends AsyncTask<String, Integer, String>{
private ProgressDialog progressDialog;
protected void onPreExecute(){
progressDialog = ProgressDialog.show(WebviewActivity.this, "", "Loading...", true);
progressDialog.show();
}
@Override
protected String doInBackground(String... params) {
if ( isOnline() == true && isOnlineHost() == true )
myWebView.loadUrl(webLink);
else
myWebView.loadUrl("file:///android_asset/errorpage.html");
progressDialog.dismiss();
return null;
}
}
}
顯示ProgressDialog
時,使用AsyncTask
在后台檢查連接性。 檢查完成后關閉對話框。
確保您的類實現了Runnable
。 然后使用類似:
private WebView myWebView;
private ProgressDialog progressDialog;
作為全局變量,
progressDialog = ProgressDialog.show(this, "Title", "Loading...", true, false);
Thread thread = new Thread(this);
thread.start();
要啟動線程,
public void run() {
// Time consuming task
}
正如線程中運行的那樣,並且
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
// What to do when thread is finished
progressDialog.dismiss();
}
};
處理線程的完成。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.