本篇目的為實做手機上之載入中對話方塊,如同在電腦上開啟網頁等待時,滑鼠圖示總是會出現小沙漏,或是在安裝程式時,會出現一條跑讀著已完成幾%之圖示。
在Android裡必須透過ProgressDialog來執行,此需特別留意Progress Dialog必須要在背景程式執行完畢之前,以dismiss()方法關閉取得Focus對話方塊,否則會陷入無限迴圈中。第二點要注意的是執行緒當中不可有任何變更context或是Parent View的任何狀態、文字輸出等事件,這是因為執行緒裡面的Context以及View並不屬於Parent,兩者之間也沒有任何關係。
小試身手小範例
設計一個按鈕,按下按鈕之後,開始執行緒的週期,在執行的過程中顯示ProgressDialog,最後執行完畢時,結束ProgressDialog對話視窗。
JAVA檔
import android.app.Activity;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
public class BlogExample extends Activity {
public ProgressDialog PDialog = null;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.main);
Button StartButton = (Button)findViewById(R.id.Button01);
StartButton.setOnClickListener(ShowProgressDialog);
}
Button.OnClickListener ShowProgressDialog = new Button.OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
final CharSequence strDialogTitle = getString(R.string.str_dialog_title);
final CharSequence strDialogBody = getString(R.string.str_dialog_body);
//顯示Progress對話視窗
PDialog = ProgressDialog.show(BlogExample.this, strDialogTitle, strDialogBody, true);
new Thread(){
public void run(){
try{
sleep(5000);
}
catch(Exception e){
e.printStackTrace();
}
finally{
PDialog.dismiss();
}
}
}.start();
}
};
}
XML檔
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="小試身手小範例"
android:textSize="20sp"
android:layout_marginBottom="10sp"
/>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="請按下按鈕,開啟後將開始執行Thread!"
android:textSize="15sp"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=" 執 行 "
android:textSize="30sp"
android:layout_marginTop="15sp"
android:id="@+id/Button01"
/>
</LinearLayout>
留言列表