最近在观看一个Android开发中,有一个问题百思不得其解,就是从Fragment传数据回Activity和Activity传数据到Fragment中,bundle其实刚开始还是理解的,但是当老师讲解到Java中的接口回调也可以使数据传回。
当时就觉得,Java的基础掌握的还是不牢固,然后这几天看了好多例子,但是就是看这些例子的时候,每当快看懂的时候,又写了一个例子又看不懂了。昨晚更是看到2点,就是每当快懂的时候就又陷入一个死循环。就在今天又重新看了那个老师讲的,突然就大彻大悟了,然后在eclipse中使用java的代码又重复写了一两次,感觉可能就是老师的这个讲的有点麻烦,我就觉得会不会用简单的方法讲出来呢,于是写了这个博客,只是一个java新手,希望大佬有更高明的可以再对我进行一些讲解,感谢。
废话不说了,开始。
我用java的可能更好理解,用的是老师的逻辑。看代码
package demo;
public interface Callback {
public void setToDemo(String s);
public String getFromDemo();
}
package demo;
public class Caller {
public static void main(String[] args) {
BCaller bCaller=new BCaller();
bCaller.setCall(new Callback() {
@Override
public void setToDemo(String s) {
System.out.print("2\n");
System.out.print(s);
}
@Override
public String getFromDemo() {
System.out.print("4\n");
return "hello Fragment\n";
}
});
bCaller.run();
bCaller.unrun();
}
}
package demo;
public class BCaller {
private Callback callback;
public void setCall(Callback callback) {
this.callback=callback;
}
public void run() {
System.out.print("1\n");
callback.setToDemo("hello Demo\n");
}
public void unrun() {
System.out.print("3\n");
String s=callback.getFromDemo();
System.out.print(s);
}
}
我上面的注释仅仅只是我自己的一些见解,就是我是靠这么的想法来做到理解了接口回调,大佬勿喷。
当然仅仅只是看上面的注释可能是看不懂的,接下来我来给大家说明,他到底是怎么个运行步骤的。
我们记得那个老哥的话,当调用时,使用的是调用者重写的方法。
那么我们重写了两个方法,一个是void一个是String类。
运行时,bcaller.run(),是调用了被调用者的run方法,我们来看run方法中,有一个接口的方法,将“hello Demo”这个参数进行回调,按老哥说的,我们直接看调用者重写的接口方法setToDemo,是直接将传递过来的s输出,那么一定输出的就是“hello Demo”,我还写了过程的1,2就可以明确看到,在到被调用者的run方法后,直接回调到调用者的重写的setToDemo方法中。
bcaller.unrun()这个方法呢,跟上述一样的,到达被调用者的unrun方法,发现,将s赋值了一个接口调用结果,调用时,看调用者重写方法,我们再去调用者的方法中看,原来return了一个String类参数,那么此时s一定是被赋值了“hello,Fragment”,过程也是3,4,可以明确看出,在调用unrun方法后,直接回调到调用者的getFromDemo方法,然后返回参数。
那么我们来看输出结果,是否是我们想的那样呢?
过程确实如此呢,所以说,若是想快速了解并学会使用,那么就是在回调时,直接想到调用者重写的接口方法,如此运行。
当然以上的只是同步回调。
以上以上都是个人的基础见解,大佬勿喷,感谢!!!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)