場景是從網絡中拉取數據並渲染到UI中。網絡
ProgressDialog用來告知用戶「正在加載」。若是加載太慢,可能致使用戶不想等待,用戶選擇退出(按返回鍵
)時應該是ProgressDialog和對應的下面的Activity都退出。ide
而ProgressDialog本質上是一個新的Activity。因此要作到ProgressDialog和Activity都退出
稍微麻煩。函數
代碼:oop
public class MainActivity extends AppCompatActivity { private Handler mHandler = new Handler(Looper.getMainLooper()); ProgressDialog dialog; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); dialog = ProgressDialog.show(MainActivity.this, "", "數據加載中", true, true); dialog.setCanceledOnTouchOutside(false); dialog.setOnCancelListener(new DialogInterface.OnCancelListener() { @Override public void onCancel(DialogInterface dialog) { MainActivity.this.finish(); } }); // 從網絡拉取數據,並渲染到UI中 getDataAndRender(); } private void getDataAndRender() { new Thread() { @Override public void run() { super.run(); // 從網絡獲取數據 Thread.sleep(1*1000); // 防止dialog一閃而過 dialog.dismiss(); mHandler.post(new Runnable() { @Override public void run() { // 渲染UI } } } }.start(); } }
ProgressDialog的dismiss方法是讓dialog消失,但不會觸發setOnCancelListener裏設置的事件響應函數。cancel不只讓dialog消失,並且會觸發setOnCancelListener裏設置的事件響應函數。post
ProgressDialog.show(MainActivity.this, "", "數據記載中", true, true);
最後一個參數是true,這樣dialog監聽用戶的返回操做而後觸發cancel。this