java设计模式——回调机制
来源:互联网 发布:51软件测试网 编辑:程序博客网 时间:2024/05/21 10:08
回调机制分为异步回调和同步回调,我们主要说同步回调,举一个android Button注册监听事件的例子。
首先写一个接口,里面有onClick()点击方法,也就是回调方法:
//这个是View的一个回调接口 /** * Interface definition for a callback to be invoked when a view is clicked. */ public interface OnClickListener { /** * Called when a view has been clicked. * * @param v The view that was clicked. */ void onClick(View v); }
这个接口可以写在类里,也可以单独写一个接口。
实现回调有两种方法:
一是通过
button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { } });
public class MainActivity extends Activity implements OnClickListener{ /** * Class A 包含Class B的引用----->背景二 */ private Button button; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button = (Button)findViewById(R.id.button1); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(getApplication(), "OnClick", Toast.LENGTH_LONG).show(); } }); }}
二是在类中实现接口OnclickListener,然后button.setOnClickListener(this);
由于实现了接口,其实这个this就相当于接口,把this发送过去转型后就是OnclickListener
public class MainActivity extends Activity implements OnClickListener{ /** * Class A 包含Class B的引用----->背景二 */ private Button button; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button = (Button)findViewById(R.id.button1); /** * Class A 调用View的方法,而Button extends View----->A类调用B类的某个方法 C */ button.setOnClickListener(this); } /** * 用户点击Button时调用的回调函数,你可以做你要做的事 * 这里我做的是用Toast提示OnClick */ @Override public void onClick(View v) { Toast.makeText(getApplication(), "OnClick", Toast.LENGTH_LONG).show(); }}
下面是View类的setOnClickListener方法
public class View implements Drawable.Callback, KeyEvent.Callback, AccessibilityEventSource { /** * Listener used to dispatch click events. * This field should be made private, so it is hidden from the SDK. * {@hide} */ protected OnClickListener mOnClickListener; /** * setOnClickListener()的参数是OnClickListener接口------>背景三 * Register a callback to be invoked when this view is clicked. If this view is not * clickable, it becomes clickable. * * @param l The callback that will run * * @see #setClickable(boolean) */ public void setOnClickListener(OnClickListener l) { if (!isClickable()) { setClickable(true); } mOnClickListener = l; } /** * Call this view's OnClickListener, if it is defined. * * @return True there was an assigned OnClickListener that was called, false * otherwise is returned. */ public boolean performClick() { sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_CLICKED); if (mOnClickListener != null) { playSoundEffect(SoundEffectConstants.CLICK); //这个不就是相当于B类调用A类的某个方法D,这个D就是所谓的回调方法咯 mOnClickListener.onClick(this); return true; } return false; } }
每次调用onClick()方法时(mOnClickListener.onClick(this); )都会回调一次MainActivity中的onClick方法。
总结:
- 首先有一个接口,接口中有至少一个方法(也就是回调用的方法)
- 在一个类中实现这个接口然后获取另一个类的实例(button:通过findViewById获得)
- 然后用这个实例button.setOnClickListener(this);或者直接button.setOnClickListener(new View.OnClickListener(), 总之就一个目的把接口实例传过去
- 在另一个类(Button类)中接收到接口实例,并通过这个接口实例调用接口方法从而实现回调
0 0
- java设计模式——回调机制
- 设计模式—Java反射机制
- 设计模式——观察者模式和回调机制
- Command设计模式和java回调机制的异同
- Java回调机制与模板方法设计模式
- java中的监听机制——观察者设计模式详解
- command设计模式和回调机制
- Java设计模式—工厂设计模式
- java多线程设计模式:wait/notify机制
- java多线程设计模式:wait/notify机制
- Java多线程设计模式:wait/notify机制
- Java多线程设计模式:wait/notify机制
- Java多线程设计模式:wait/notify机制
- Java多线程设计模式:wait/notify机制
- Java多线程设计模式:wait/notify机制
- java多线程设计模式:wait/notify机制
- Java多线程设计模式:wait/notify机制
- java多线程设计模式:wait/notify机制
- 什么是傅里叶变换,本质是?
- shell 递归遍历文件夹下所有文件
- 关于Python并发机制的一些总结
- 博客搬家了
- java web开发高并发系列(4)---Java并发与多线程教程(2)
- java设计模式——回调机制
- 2016的总结--第一次
- ubuntu 下安装jdk+tomcat以及环境变量配置
- jqueryajax 向springmvc controller传值
- 总结js常用函数和常用技巧(持续更新)
- tensorflow编程一些需要知道的 - 3
- 第三十三课:c++中的字符串类----------狄泰软件学院
- 安卓属性动画知识点总结
- 剑指Offer系列-面试题8:旋转数组的最小数字