Android回调监听的实现

一、首先定义监听函数

public interface OnKeyValueListener {

    void  getKeyValueClick(String value);
}

二、在需要传递内容的 A类 中传入该监听对象

2.1 获取监听


public class MyButton {
public MyButton(Context context) {
}
private OnKeyValueListener mOnkeyValueListener; //定义监听接口,接受Main类传过来的监听对象

//模拟用户触摸屏幕时系统底层进行的操作
public void doClick() {
mOnkeyValueListener.getKeyValueClick("点击了A"); //该方法可以在A类跟Main类中调用,都会将内容传给Main类。这句话就实现了监听的效果
}

public OnKeyValueListener getmOnkeyValueListener() {
return mOnkeyValueListener;
}

public void setmOnkeyValueListener(OnKeyValueListener mOnkeyValueListener) {
this.mOnkeyValueListener = mOnkeyValueListener; //Main类中调用该方法,传入监听对象
}
}

2.2 传递内容

在该类中需要调用的地方实现监听函数方法 

mOnkeyValueListener.getKeyValueClick("点击了A"); //该方法可以在A类跟Main类中调用,都会将内容传给Main类。这句话就实现了监听的效果

三、传入监听函数,并实现方法

public class MainActivity extends Activity implements OnKeyValueListener{

MyButton myButton ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myButton = new MyButton(MainActivity.this);
myButton.setmOnkeyValueListener(this); //传递监听对象到A类

myButton.doClick(); //这里是调用A类中的方法,接受到A类传入的内容
}

@Override
public void getKeyValueClick(String value) {
Log.d("panzq","######## value = "+value); //打印获取到的内容
}
}

 结果

2019-04-17 12:55:38.285 3660-3660/com.panzq.callbacklistener D/panzq: ######## value = 点击了A

1.为按钮setmOnkeyValueListener注册监听,将括号里面的this作为参数传给MyButton,this继承了 OnKeyValueListener

2.由于MyButton中有一个setmOnkeyValueListener方法,通过this.mOnkeyValueListener = mOnkeyValueListener;;可以将第一步传进来的OnKeyValueListener对象赋给其成员变量

3.用户点击屏幕,触发系统底层的doClick函数
4.在doClick函数中
mOnkeyValueListener.getKeyValueClick("点击了A")中,由第二步我们已知listener已被赋予成用户传进来的具体实现,所以此时的 mOnkeyValueListener.getKeyValueClick("点击了A");所调用的方法就是用户传进来的listener中重写的getKeyValueClick方法,到这里也就是相当于反过来调用回用户所重写的getKeyValueClick(),这里的getKeyValueClick也就是我们常说的回调方法。

posted @ 2019-04-17 12:42  强哥10732  阅读(2535)  评论(0编辑  收藏  举报