赞
踩
一、回调必有的四要素:
1.回调的接口,该接口一般在使用的类里面创建或者单独创建
//创建的回调接口,以及接口中要做的事
public interface Callback{
void doSomething();
}
2.在使用的类中接口的定义变量(接口不可以实例化)
// 一个接口变量
private Callback mCallback;
3.一个给接口变量赋值的方法
//一个给接口变量赋值的方法
public void setmCallback(Callback callback){
mCallback=callback;
}
4.该类中定义的接口变量的使用的场景
//一个使用接口变量的地方
public void use(){
mCallback.doSomething();
}
整体的代码如下,一般将将接口写在使用的类中
public class TestA { // 一个接口变量 private Callback mCallback; // 一个回调 public interface Callback{ void doSomething(); } //一个给接口变量赋值的方法 public void setmCallback(Callback callback){ mCallback=callback; } //一个使用接口变量的地方 public void use(){ mCallback.doSomething(); } }
二、具体实现回调的接口的类:
在具体回调实现的类中,一般是实例化使用类的对象,在具体实现的类中采取接口的变量赋值,以及接口的具体实现方法,正式这样综合实现了接口和具体的实现分离,从而达到回调效果,具体也是三大要素
1.常用的实现的方法是采用匿名的方式实现接口的具体方法
public class TestB extends Activity { //TestA类的实例的引用 private TestA mTestA @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mTestA=new TestA(); mTestA.setmCallback(new mTestA.Callback() { @Override public void doSomething() { //具体实现接口的方法 Log.d(TAG, "doSomething: "+"我是接口的具体实现"); } }); //实例实现TestA类中使用接口的方法 mTestA.user(); } }
2.通过实现接口,以及传递自己本身来实现回调
public class B extends Activity implements TestA.Callback { //A类的实例的引用 private TestA mTestA; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mTestA=new TestA (); //B类将自己(实际上是接口的实现)传给A类实例的接口变量 mTestA.setmCallback(this); //实例实现A的方法,或者在A中实现该方法 mTestA.user(); } //B类实现了A类的接口 @Override public void doSomething() { Log.d(TAG, "doSomething: "+"我是接口的具体实现"); } }
回调的简单例子:
1.接收数据
public class MainActivity extends AppCompatActivity implements MyCallBack { private ActivityMainBinding activityMainBinding; public static final String TAG="MainActivity"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); activityMainBinding = DataBindingUtil.setContentView(this, R.layout.activity_main); getData getData=new getData(); getData.SetCallBack(this); } @Override public void getInfo(String info) { Log.e(TAG, "getInfo: "+info ); activityMainBinding.showinfo.setText(info); } }
2.创建接口
public interface MyCallBack {
void getInfo(String info);
}
3.获取数据
public class getData {
public String MyName="我是功夫熊猫";
private MyCallBack myCallBack;
public void SetCallBack(MyCallBack myCallBack){
this.myCallBack =myCallBack;
showInfo(MyName);
}
public void showInfo(String info){
this.myCallBack.getInfo(info);
}
}
4.结果展示
总结如下:
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。