1.回调是什么?
回:接受回来的数据
调:调用接口中的方法
2.回调的作用?
让两个不相干的事物进行通信,传递数据
3.我们为什么要了解回调?
比如项目中,更新app的包,可以使用service后台下载,然后通知acitivty更新进度。还有比如说我们查看按钮点击事件的源码,如果我们了解回调的原理,回调的使用方法,那我们能快速地理清知识脉络。
4.不同角度看待回调:
(1) 站在“回”的角度,我先在“调”中注册接口,实现接口里的方法,然后告诉“调”,你只要调用接口中的方法,我就知道你调用了。
(2) 站在“调”的角度,我提供了注册接口的方法,并在某地调用了接口里的方法,然后告诉“回”,只要你在我这注册接口并实现接口中的方法,你就知道我给你返回了什么。
通过以上两点,我们会更清晰地了解回调。
这张图,简单说明了三者的逻辑关系。
5.通过上图举例:
需求:recyclerview没有提供像listview那样的点击事件,需要我们自己去实现。
步骤:我们只讲思路,写的是伪代码
(1)定义接口,接口中定义onItemClick()
public interface OnRecyclerViewItemClickListener {
void onItemClick(View view, int position);
}
(2)调用者:RecyclerViewAdapter,提供注册接口,调用接口中的方法
public RecyclerViewAdapter extend Adapter{
private OnRecyclerViewItemClickListener onItemClickListener;
// 提供注册接口
public void setOnItemClickListener(OnRecyclerViewItemClickListener onItemClickListener) {
this.onItemClickListener = onItemClickListener;
}
public void onBindViewHolder(ViewHolder viewHolder, int position) {
if(this.onItemClickListener != null) {
viewHolder.itemView.setOnClickListener(new OnClickListener() {
public void onClick(View view) {
// 调用接口中的方法
onItemClickListener.onItemClick(view, pos);
}
}
}
(3)监听者:TestActivity,注册接口到RecyclerViewAdapter中,实现接口中的方法
public TestActivity extend BaseActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
// 注册接口到RecyclerViewAdapter中,重写接口中的方法
RecyclerViewAdapter adopter = new RecyclerViewAdapter();
adapter.setOnItemClickListener(new OnRecyclerViewItemClickListener() {
@Override
// 重写接口中的方法
public void onItemClick(View view, int position) {
// 拿到数据,自己做操作
}
});
}
}
(4)触发:当我们点击item时,就会走到调用者RecyclerViewAdapter里的onClick方法,方法里调用了接口定义的onItemClick()方法,然后监听者TestActivity里的onItemClick()就会被调用。这样整个回调过程就完成了。这个过程也就是模仿着Android中的点击事件来做的。