android回调的一些总结
来源:互联网 发布:php游戏网站源码 编辑:程序博客网 时间:2024/06/06 05:04
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">费了一些时间研究学习回掉。都是自我的理解,有不正确的地方请指正。</span>
网上的例子动不动一上来就来个接口,完全不知道干嘛的,自己想想过程,然后弄了这个。
java中:
一、简单版的:
classA调用classB中的m()方法,而m()方法中却又调用了classA 中的n()方法。这就是回调。
上代码:
public class ClassA0 {ClassB0 b0 = new ClassB0();public void testA0Method(){System.out.println("这里去调用ClassB0的m()方法");b0.m(ClassA0.this);}public void n(){System.out.println("方法n0被调用了。");}}
package demo1;public class ClassB0 {public void m(ClassA0 a0) {System.out.println("方法m0被调用了。");a0.n();System.out.println("返回调用ClassA0的n()方法");}}
这个例子比较简单,但是日常工作中不可能只有这样简单的调用,如果在n()方法中有多种不同的操作 [PS:不会组织语言了,就是多态的意思,理解理解] 这个时候就引入接口interfaceC。把n()方法放到接口中,然后让classA去实现n()方法。
二、进阶版的
引入Inerface,实现了回掉方法的重用(就这么叫吧,如果不合适请指正)。在ClassB中对原来ClassA的引用现在变成了对其接口的引用,是其不再是单一的调用。
上代码
package demo2;public interface Interface1 {public void n();<strong><span style="color:#ff0000;">//这里的n()是可以带参数的,如果想回掉方法中得到一个返回的值可以把这个参数放在这个方法中</span></strong>}
package demo2;public class ClassB1 {public void m(Interface1 i1) {<strong><span style="color:#ff0000;">//这里变成了对接口的引用,实际的n()方法是接口的实现对象所实现的。</span></strong>System.out.println("方法m0被调用了。");i1.n();System.out.println("返回调用Interface1实现类中的n()方法");}}
package demo2;public class ClassA1 implements Interface1{ClassB1 b0 = new ClassB1();public void testA0Method(){System.out.println("这里去调用ClassB0的m()方法");b0.m(ClassA1.this);}public void n(){System.out.println("ClassA1中的方法n0被调用了。");}}
package demo2;public class ClassC1 implements Interface1 {ClassB1 b0 = new ClassB1();public void testA0Method(){System.out.println("这里去调用ClassB0的m()方法");b0.m(ClassC1.this);}public void n(){System.out.println("ClassC1中的方法n0被调用了。");}}
package demo2;public class MainTest1 {public static void main(String[] args) {new ClassA1().testA0Method();System.out.println("-------我是分割线----------------------------");new ClassC1().testA0Method();}}
最后的结果:
到此这样循序渐进的理解了吧?
这里有个不错的博客http://www.codeceo.com/article/java-asyn-callback.html。
Android中:
有了以上的基础,再来看看Android中的。
最常见的就是onclickListener中的回调。
看看系统的源码
//相当于ClassB
public class View implements Drawable.Callback, KeyEvent.Callback, AccessibilityEventSource { <span style="background-color: rgb(255, 255, 102);"><strong><span style="color:#33ff33;"> </span><span style="color:#3333ff;">// 接口实例,相当于上面例子的interface1的实例</span></strong> protected OnClickListener mOnClickListener; <span style="color:#336666;">//<strong>这个inerface是定义在View类中的一个内部的interface</strong></span></span> <span style="color:#000099;"> <span style="background-color: rgb(255, 255, 102);"><strong>// 接口实例化,相当于上面例子的m()方法</strong></span></span> public void setOnClickListener(OnClickListener l) { if (!isClickable()) { setClickable(true); } mOnClickListener = l; }
<span style="white-space:pre"></span><span style="background-color: rgb(255, 255, 102);">//这中间有好多的调用关系,有兴趣自己看看源码</span> public boolean performClick() { if (mOnClickListener != null) { <span style="background-color: rgb(255, 255, 102);"><span style="color:#000099;"><strong> //B类调用A类的实现方法,相当于上面的n()方法 </strong></span> mOnClickListener.onClick(this); </span> return true; } return false; }
相当于ClassA,ClassC
public class MainActivity extends Activity implements <strong style="background-color: rgb(255, 204, 102);"><span style="color:#000099;">OnClickListener</span></strong>{ private Button button; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button = (Button)findViewById(R.id.button1); // A类实例化接口 button.<strong style="background-color: rgb(0, 0, 153);"><span style="color:#ffcc00;">setOnClickListener(this)</span></strong>; } <span style="color:#ffcc00;background-color: rgb(0, 0, 153);">@Override public void onClick(View v) { // 回调函数 }</span>
只不过平时喜欢写成内部类而已。
最后附上java的回调源码:http://download.csdn.net/detail/xzgww0902/9494939,android的就不附了。
0 0
- android回调的一些总结
- Android的一些总结
- android一些属性的总结
- android一些属性的总结
- Android Application的一些总结
- android:drawable的一些总结
- android视图的一些总结
- android jni的一些总结
- Android Context的一些总结
- Android synchronized的一些总结
- Android研究的一些总结
- Android开发的一些简单的总结
- Android媒体的一些使用总结
- [转]Android媒体的一些使用总结
- Android媒体的一些使用总结
- Android媒体的一些使用总结
- 总结的一些android公共库
- Android媒体的一些使用总结
- IE实现userData永久存储
- list、listkey、listValue属性
- C-IDE入门帮助
- 关于机器学习&深度学习的一些问题,求教。
- 2015工作年结
- android回调的一些总结
- Java静态工程方法的优点和缺点
- Android基本控件 - Button和ImageButton
- Android生成签名文件并用其对apk文件进行签名(Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]错误完美解决)
- 从零迈向iOS--新手篇
- Eclipse新建Activity并启用(二):启用新建Activity
- 远程调用原理与对比RMI、MINA、ESB、Burlap、Hessian、SOAP、EJB
- VS获取工程版本信息,AxtiveX或者OCX的版本取得
- 利用JS提交表单的几种方法和验证