Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android開發之ProgressDialog的使用

Android開發之ProgressDialog的使用

編輯:關於Android編程

ProgressDialog類似於ProgressBar類。

用於顯示一個過程,通常用於耗時操作。

 

幾個方法介紹:

1.setMax()

設置對話框中進度條的最大值。

2.setTile()

設置標題。

3.setProgressStyl()

設置對話框中進度條的樣式。例如:環形和水平。

參數:

ProgressDialog.STYLE_SPINNER 環形精度條

ProgressDialog.STYLE_HORIZONTAL 水平樣式的進度條

4.setMessage()

設置顯示的內容。

 

演示實例:

用於模擬一個耗時的連接操作。

圖:

\ \\

MainActivity.java

 

public class MainActivity extends Activity {

	Button button, button2;
	ProgressDialog progressDialog;
	public final static String ABOUT_SERVER = "Connect";

	// 信息廣播接收
	BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {

		@Override
		public void onReceive(Context c, Intent intent) {

			String str = intent.getStringExtra("DATA");

			if (str.equals("0")) {
				progressDialog.setMessage("開始連接");

			} else if (str.equals("1")) {
				progressDialog.setMessage("連接完畢");
			} else {
				progressDialog.dismiss();

			}
		}
	};

	@Override
	public void onCreate(Bundle savedInstanceState) {

		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		// 注冊廣播監聽
		IntentFilter intentFilter = new IntentFilter();
		intentFilter.addAction(ABOUT_SERVER);
		registerReceiver(broadcastReceiver, intentFilter);

	}

	public void click(View v) {

		progressDialog = new ProgressDialog(MainActivity.this);
		progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
		progressDialog.setMessage("准備建立連接·············");
		progressDialog.show();
		Intent intent = new Intent(MainActivity.this, ServerActivity.class);
		startService(intent);
	}

}
activity_main.xml

 

 

ServerActivity.java

 

 

public class ServerActivity extends Service {

	Handler handler = new Handler() {
		public void handleMessage(Message msg) {

			Intent intent = new Intent(MainActivity.ABOUT_SERVER);
			if (msg.what == 0) {
				intent.putExtra("DATA", "0");

			} else if (msg.what == 1) {
				intent.putExtra("DATA", "1");

			} else {
				intent.putExtra("DATA", "2");
				ServerActivity.this.stopSelf();
			}
			sendBroadcast(intent);

		};

	};

	@Override
	public void onCreate() {
		super.onCreate();

		Thread thread = new Thread(new Runnable() {
			@Override
			public void run() {
				// 要做的事
				try {
					for (int i = 0; i < 3; i++) {
						Thread.sleep(1000);
						Message message = new Message();
						message.what = i;
						handler.sendMessage(message);
					}
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}

			}
		});
		thread.start();

	}

	@Override
	public IBinder onBind(Intent arg0) {
		// TODO Auto-generated method stub
		return null;
	}

}
AndroidManifest.xml

 

 




    

    
    
    
        
        
        
        
            
                

                
            
        
    


在做此實例時,遇到報錯,一大串紅字,最關鍵的一句話:

 

This message is already in use.

從網上查得:與handler發送Message相關,消息已經在消息隊列了,而且正被使用,而如果往同一個隊列發送相同的對象就會報錯。 造成這個錯誤是因為:
final Message message = new Message();

		Thread thread = new Thread(new Runnable() {
			@Override
			public void run() {
				// 要做的事
				try {
					for (int i = 0; i < 3; i++) {
						Thread.sleep(1000);
						message.what = i;
						handler.sendMessage(message);
					}
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}

			}
		});
		thread.start();
使用了同一個Message。用的API 19(4.4)與4.4模擬器,不顯示錯誤,只是卡住,用的API 19(4.4)與2.2模擬器就報錯了。

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved