场景是从网络中拉取数据并渲染到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