优点
一般我们使用dialog时,都会在使用的时候创建一个新的dialog对象,然后显示出来,这样虽然很简单,但是当场景变得复杂时,就会出现问题:
比如当我们需要多次弹出一样的一个或几个弹窗,如果我们每次都创建一个新的对象,就会创造出很多对象,导致内存开销增大,这显然是我们不愿意看到的。
又或者当我们dialog正在显示时,activity意外销毁,比如用户切换横屏模式,导致activity销毁重建,这时候如果你只是简单的创建并显示了dialog,你的dialog就会消失了。
但是当你把dialog交给activity去管理,这些就都不再是问题。activity可以让你的dialog轻松复用,并且可以保存并恢复其状态。
实现
下面我们就来看一下如何实现:
既然是把dialog交给activity管理,就要让activity能够识别每个dialog。识别的方式就是给每个dialog加个编号,这个编号是int类型的。
创建:要创建一个dialog,需要在onCreateDialog()中实现创建dialog的语句。当然,不能忘了id。这里通常会采用switch语句,每一个id创建一个不同的dialog,像这样:
protected Dialog onCreateDialog(int id) { Dialog dialog; switch(id) { case 0: // do the work to define the 0 Dialog break; case 1: // do the work to define the 1 Dialog break; default: dialog = null; } return dialog; }
调用:调用的时候只需要使用showDialog(int id)方法,这个传入的id自然就是前面定义好的id。
- 隐藏:想要dismiss的时候,可以用dialog自身的dismiss()方法,也可以用activity的dismissDialog(int id)方法。当dialog被dismiss之后,并没有被销毁,而是被activity保存了下来,下次调用的时候即可被复用
- 删除:如果不想被activity保存,则可以用removeDialog(int id)方法,删除某个dialog。