本人自己也经常在开发中遇到接口回调机制,说来惭愧,虽然一直在用接口,但是只是去复制别人的代码,一直弄不明白接口回调的原理,甚至自己也努力去看了很多篇文章,几乎看了所有的接口回调的例子,什么延时问答啊,孔融让梨啊,都看了,例子都能背下来了,两三个月了还没理解。看来本人头脑不是一般的笨。哎。。。。。
也许是用多了吧,今天不知道怎么地灵光乍现了,突然就理解了。下面我就用我自己的理解方式说说接口回调机制。Andorid的button的setOnClickListener绝对是一个金典的接口回调例子,大家都经常这样写对吧,然后我们点了这个button就可以执行我们在onClick里面的代码了。这是个金典的例子,建议从这个例子去看源码上手叫容易。我就直接上步骤上代码上图了。
全手写,图也是自己画的,懂的勿喷,高手请绕道。(如果人品不错麻烦点个赞)
fragmentb_bt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//执行代码...
}
});
1.定义一个接口,接口里面写执行的方法
public interface GetData {
void onCli(String str);//参数自定义
}
2.需要引用的地方持有该接口的引用
private GetData getData;
public void setGetData(GetData getData) {
this.getData = getData;
}
setGetData(new GetData() {
@Override
public void onCli(String str) {
//需要执行方法的代码...
Toast.makeText(this.getContext(),str,Toast.LENGTH_LONG).show();
}
});
getData.onCli("我不是瞎BB");
我分的比较详细,5步就能搞定了,代码很简单,相信都能看懂。前三步非常简单应该都没什么问题,就是后两步估计有点不好理解,(反正我就是被后两步搞的头回脑胀才理解不的,应该说是被这两步误导了,总听人说button的点击事件就是回调机制,然后我就天真的以为,调用了setOnClickListener就是最后一步,然后自己测试的时候每次都空指针。)其实我们可以想一想,我们每次在setOnClickListener里面写了代码,但是运行的时候马上执行了吗?并没有,是不是需要点击了按钮之后才会调用写的代码?所以我写的例子最后一步应该是我们设置了这个参数后,第四步写的代码才会被执行。Button的setOnClickListener也是,只不过setOnClickListener的onClick的参数是View,不需要我们手动去设置。如果还不懂再看下面一张图。
如果实在理解不了,那么接口回调的初始化的步骤千万不要错了,按照1.2.3.4.5的方法去写绝对Ok。(不过应该没有比我还蠢的人了吧)