接口回调的实现方式,在我看来,大概分为以下两种情形:
第一种方式:定义内部接口(我们通过两个类A类和B类即可实现)
A类:此类中存在我们想要获取的信息
1.定义内部接口 CallBack
2.接口内定义抽回调方法 onCallBack();
3.定义接口的引用 CallBack listener;
4.定义接口注册方法 setOnCallBack(CallBack listener){
this.listener = listener;}
public class A extends Activity {
//③定义接口引用
CallBack listener;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
//④定义接口注册方法
public void setOnCallBack(CallBack listener) {
this.listener = listener;
}
//①定义内部接口
public interface CallBack {
//②定义回调方法(可以根据需要设置我们需要回调的参数)
void onCallBack(String result);
}
}
B类:此类用来从A类获取信息
1.获取A类实例
2.调用A类中注册接口方法,传递接口对象给A
3.获取回调结果String result(可以根据需要,设置回调内容)
public class B extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_b);
//①实例化A对象
A a = new A();
//②调用A类中注册接口方法,传递接口对象给A
//到此为止,我们就能够从回调方法onCallBack中取得我们需要的内容,此处我们回调的是一个字符串
a.setOnCallBack(new A.CallBack() {
@Override
public void onCallBack(String result) {
}
});
}
}
第二种方式:定义公共接口(我们需要通过一个接口,两个类A类和B类来实现)
接口CallBack:定义回调方法
public interface CallBack {
void onCallBack(String result);
}
A类:数据的提供方
public class A extends Activity {
//①声明接口引用
CallBack listener;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listener.onCallBack("来追我啊!");
}
//②定义接口注册方法
public void setOnCallBack(CallBack listener) {
this.listener = listener;
}
}
B类:数据的获取方
public class B extends Activity {
public final String TAG = getClass().getSimpleName();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_b);
//①实例化A类
A a = new A();
//②调用A类注册接口的方法
a.setOnCallBack(new CallBack() {
@Override
public void onCallBack(String result) {
Log.i(TAG, result);
}
});
}
}