App都少不了的一个需求,那就是Dialog弹窗,而且通常一个应用中都不止一个Dialog弹窗,多的时候可能达到六七个,那么你是否会为你的应用重复写六七个弹窗:ExitLoginDialog、DownDialog、UpdateDialog……如果是使用系统的Dialog还好,可以直接new一个就行了,但是如果有自定义的需求呢?比如这样:
乍一看只用一点点文字的区别,可是如果不使用回调机制,那么你该如何控制弹窗的点击事件呢?很明显点击第一个弹窗(ExitLoginDialog)的事件对应为退出登录,而点击第二个弹窗(UpdateDialog)则会新建应用升级任务。最笨的方法是这样:分别写两个差不多的Dialog,找到各自的btnSure(确认按钮),然后各自设置为:
ExitLoginDialog中:
- 1
- 2
- 3
- 4
- 5
- 6
UpdateDialog中:
- 1
- 2
- 3
- 4
- 5
- 6
实现没有问题,但从代码设计上肯定是有问题的,我们发现这两个类主要的逻辑中只有点击确认后执行的操作是不同的,其他逻辑几乎相同,所以我们就思考是不是可以将Dialog写成一个类,然后对外提供一个方法,当确认按钮点击onClick()执行的时候执行我们自己设置的方法。那么这就是事件回调的思想的了:当一个事件执行的时候,我们希望能自己定义一个函数来执行不同的操作,这个函数就是回调函数,它会在某个事件执行之后回调执行。
注意:Android系统本身的onClick(),onPause()等就是回调函数,当手指点击的时候回调onClick()函数,当Activity界面隐藏的时候回调onPause()函数。
下面我们以事件回调的方法实现以上逻辑。
事件回调设置三部曲:
1.定义回调事件的接口
2.声明回调事件
3.对外提供设置事件回调的接口
PS:我们新建了一个继承自Dialog的类,命名为BaseDialog,接口回调定义在该类中!
按照以上步骤,首先我们定义回调事件接口:
- 1
- 2
- 3
- 4
接口定义好了,我们很明显能看到里面两个函数的意思,那就是当点击了取消按钮后执行的操作和点击了确认按钮后执行的操作,哪里调用呢?当然是点击了相应按钮的时候了!但是我们还没有实例来调用,所以我们执行步骤2先声明一个: