标准
如下是我们平常使用的回调
btn_rigister.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// TODO log in
}
});
概念
什么是回调?
实现了抽象类/接口 的实例实现了父类的提供的抽象方法,后,将该方法交还给父类来处理
比如view具有被点击的通性,但是每个点击又会产生不一样的事件处理一样,因此android对外暴露一个接口有个onClick方法,你需
要处理啥你就写啥,view只会调用这个方法,具体怎么处理你已经自己为不同的点击事件做了处理了。
栗子
如下是一个回调的栗子,接口会得到一个实例,谁调用就重写它
public class Employee {
/*
* 定义回调接口的成员变量
*/
private Callback mCallback;
/*
* 声明回调接口
*/
public interface Callback{
public abstract void work();
}
/*
* 设置回调接口对象成员变量
*/
public void setCallback(Callback callback) {
this.mCallback = callback;
}
/*
* 调用回调接口对象中的方法
*/
public void doWork() {
mCallback.work();
}
}
使用的时候这样使用,就说实现接口的方法
public class Boss {
private Employee employee;
/*
* 为Employee设置回调函数, 在这里定义具体的回调方法
*/
public void setCallback() {
employee.setCallback(new Employee.Callback() {
@Override
public void work() {
System.out.println("work");
}
});
}
}
这里我们调用对象的doWork方法就可以调用实现类中的System.out.println("work")了
RecycleView中回调
创建接口获得实例
/**
* 点击RecyclerView某条的监听
*/
public interface OnItemClickListener{
/**
* 当RecyclerView某个被点击的时候回调
* @param view 点击item的视图
* @param data 点击得到的数据
*/
public void onItemClick(View view,String data);
}
private OnItemClickListener onItemClickListener;
/**
* 设置RecyclerView某个的监听
* @param onItemClickListener
*/
public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
this.onItemClickListener = onItemClickListener;
}
实现接口
//设置点击某条的监听
adapter.setOnItemClickListener(new MyRecyclerViewAdapter.OnItemClickListener() {
@Override
public void onItemClick(View view, String data) {
Toast.makeText(RecyclerViewActivity.this, "data=="+data, Toast.LENGTH_SHORT).show();
}
});
调用的时候直接拿接口的实例调用就可以了
iv_icon.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(context, "我是图片=="+getLayoutPosition(), Toast.LENGTH_SHORT).show();
}
});
这里还传递了参数