最近在学习android的过程中发现view的OnClickListener的回调机制很有趣,就学习回调的使用方法。
首先我们自己来实现一下:
1.定义一个接口用于定义回调的方法,这个接口用于定义在某种情形下需要处理的操作,如监听器接口监听button的点击事件。
OnClickListener.java
public interface OnClickListener{
public void onClick(String str);
}
2.定义Button组件的类
Button.java
public class Button{
//声明接口
OnClickListener mOnClickListener;
//定义设置监听器的方法,用于其他类绑定监听器到该方法上
public void setOnClickListener(OnClickListener l){
//传入的OnClickListener对象用来实例化mOnClickListener
//接口的实例化相当于抽象类被继承实现后的实例化,传入的l已经对
//该接口定义的onClick()方法进行了实现
mOnClickListener = l;
}
//该方法用来模拟触发button点击事件。
public void clickButton(){
if(mOnClickListener != null){
mOnClickListener.onClick("button");
}
}
}
3.Main.java
public class Main {
public static void main (String args[]){
//声明组件
Button bt = new Button();
//绑定监听器
bt.setOnClickListener(new OnClickListener(){//匿名内部类,该类实现了OnClickListener接口的onClick()方法
public void onClick(String str){
//回调方法
System.out.println("hello,i am onclick" + str);
}
});
//点击button按钮,触发回调,相当于view类中的performClick()方法
bt.clickButton();
}
}
其实Mian类也可以这样实现:
public class Main implements OnClickListener{
//实现的方法
public void onClick(String str){
System.out.println("hello,i am onclick" + str);
}
public static void main (String args[]){
//声明组件
Button bt = new Button();
//绑定监听器,因为主类实现了OnClickLisetener接口,虽然传入的参数要求是OnClickListener对象,但是由于实现,Mian类可以向上转型为OnClickListener对象
bt.setOnClickListener(this);
//点击button按钮,触发回调,相当于view类中的performClick()方法,在不同的机制中触发的方式不同。可能由其他类触发
bt.clickButton();
}
}
运行的效果如下:
总结一下,其实实现一个回调机制就四步:
1.定义回调接口;
2.定义功能类,并在该类中声明回调接口,创建方法用于其他类调用给方法传入接口对象,实现回调;创建触发方法,执行回调接口中的方法;
3.在要使用回调接口的类中实现接口中定义的方法;
4.在要使用回调接口的类中声明功能类,设置监听器;
表述的不是很清楚,如果自己将这段代码实现一遍我想会明白的。欢迎交流。
注:文章原创,完全自由,转载注明出处即可。
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/hlgyjg/article/details/48103257