对于初入此行的人,接口回调真的是一大难题,很难理解,但是如果你从目的方面来理解 就会比较容易理解。
接口回调是要达到什么目的。原因一,一个类里面不能运用和使用其他类的一些东西,接口回调很容易实现这种吗,非常完美的实现一个类里面运用其他类的方法和变量,而且保持了代码的安全性。原因二,能把很复杂的代码放在其他类里面 减少了Activity里面的代码量
现在,一个类A 要引用另一个类B的方法methrodB()方法,A类里面必须有B的引用或者B引用的想上转型的引用或者向下转型的引用 这个引用 一般可以通过New出来一个,
B b=new B(); 现在A能用B的方法了 但是吧 A使用了B的方法 得需要返回一些东西啊 这里就需要 接口了 A继承接口Ainter 然后实现其中的methodAinter()方法 在B中调用A的这个方法 就可以传值回去了 但是在B中一定要有A的引用才能调用这个方法啊 一般用Ainter这个回调的接口向下转型就能调用A中的这个类了。
可能类的引用变了,但是 其中最终的一些东西不会变的。目的是A调用B的方法 流程就是A实现接口Ainter,它需要B的引用,调用B的方法, B需要A的引用调用A的固定的接口回调的方法。不管是怎么变 都是A实现接口Ainter A需要有B的引用,调用B的方法,在B中需要A的引用或者更为普通的需要接口的引用,调用接口中的方法。接口回调有很多种,但是种类区别就在于A的引用和B的引用的到的方式。
示例代码
package com.test.administrator.testtheworld; /** * Created by Administrator on 2017/2/17. */ public interface MyCallBack { int doSomeThing(String result); }
package com.test.administrator.testtheworld; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; public class Main3Activity extends AppCompatActivity implements MyCallBack{ private WorkClass workClass; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main3); workClass=new WorkClass(Main3Activity.this); workClass.doworkclass(); Log.w("WorkClass","195"); } @Override public int doSomeThing(String result) { Log.w("WorkClass","196"); return 0; } }
package com.test.administrator.testtheworld; import android.util.Log; /** * Created by Administrator on 2017/2/17. */ public class WorkClass { private Main3Activity main3Activity; public WorkClass(Main3Activity main3Activity) { this.main3Activity=main3Activity; } public int doworkclass(){ Log.w("WorkClass","198"); int a = main3Activity.doSomeThing("197"); return 199; } }
运行结果
02-17 16:04:43.699 19312-19312/com.test.administrator.testtheworld W/WorkClass: 198
02-17 16:04:43.699 19312-19312/com.test.administrator.testtheworld W/WorkClass: 196
02-17 16:04:43.699 19312-19312/com.test.administrator.testtheworld W/WorkClass: 195