最近做一个APP时,需要用到这点知识,写下来方便回顾。
需求是这样的,在一个界面上显示出所有设备的名称,还有个添加设备的按钮,点击后弹出一个dialog,填写完信息点击确认后dialog消失,并更新当前UI。
网上对回调比较经典的解释如下:
- Class A实现接口CallBack callback——背景1
- class A中包含一个class B的引用b ——背景2
- class B有一个参数为callback的方法f(CallBack callback) ——背景3
- A的对象a调用B的方法 f(CallBack callback) ——A类调用B类的某个方法 C
- 然后b就可以在f(CallBack callback)方法中调用A的方法 ——B类调用A类的某个方法D
首先,需要新建一个CallBack接口:
public interface CallBack{
public void refreshData();
}
然后在activity中实现该接口:
public class SmsConsoleActivity implements CallBack{
@Override
public void refreshData(){
adapter.notifyDataSetChanged();
}
}
这里就相当于背景一,
然后我们new一个dialog的实例:
AddGroupDialog dialog = new AddGroupDialog(mContext);
这里相当于背景二,
在AddGroupDialog中有如下的方法
public void setRefreshListener(CallBack callback) {
this.<span style="font-family: Arial, Helvetica, sans-serif;">callback</span><span style="font-family: Arial, Helvetica, sans-serif;">= </span><span style="font-family: Arial, Helvetica, sans-serif;">callback</span>;
}
是以callback为参数的。
然后为dialog设置监听器,
dialog.set<span style="font-family: Arial, Helvetica, sans-serif;">CallBack</span>(SmsConsoleActivity.this);
这里其实是将实现CallBack的activity作为参数传人,相当于背景三,
最后,在dialog中,当用户点击确认后,就调用
callback.refreshData();
相当于背景四。
这就是一个同步回调过程,和android中的onclicklistener等是一样的,还有就是异步回调等,经典就是Handler和Message。