Android接口回调深入理解
来源:互联网 发布:sql查询替换部分字符串 编辑:程序博客网 时间:2024/05/22 22:27
在Android开发过程中,我们一直在使用控件的各种监听事件,比如用了无数次的button的点击事件
/** * Created by licrynoob on 2016/5/13. * Copyright (C) 2016 Email:licrynoob@gmail.com */public class MainActivity extends Activity { private Button mButton; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //1 mButton = new Button(this); //2 mButton = findViewById(R.id.button); mButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(MainActivity.this,"button",Toast.LENGTH_SHORT).show(); } }); }}当这个Button被点击的时候,就会在当前的Activity显示一个Toast,下面就详细的分析一下这个过程是怎么实现的。
首先,抛开Android不谈,我们先来理解一下Java中接口回调的思想,接着去模拟一个点击事件的产生,触发和回调的过程:
有两个类A和B,一个接口OnClickLister,
/** * Created by licrynoob on 2016/5/13. * Copyright (C) 2016 Email:licrynoob@gmail.com <br> */public class A { /** * A的成员变量 */ private OnClickListener mOnClickListener; /** * 模拟A在做某事 */ public void doSomeThing() { for (int i = 0; i < 10; i++) { try { Thread.sleep(1000 * 2); } catch (InterruptedException e) { e.printStackTrace(); } //每2秒A就使用一下自己的接口 onClickListenerCallBack(i); } } /** * 为自己的接口赋值 * * @param onClickListener */ public void setOnClickListener(OnClickListener onClickListener) { this.mOnClickListener = onClickListener; } /** * 使用自己的接口 * * @param position */ private void onClickListenerCallBack(int position) { if (mOnClickListener != null) { mOnClickListener.onClick(position); } } /** * 点击接口,可以形象的理解为某种工具 * 这个工具拥有position这个参数,并且具有点击的的功能 * 但点击的功能只是抽象的定义,没有具体的实现 */ public interface OnClickListener { /** * 点击动作,待实现 */ void onClick(int position); }}
/** * Created by licrynoob on 2016/5/13. * Copyright (C) 2016 Email:licrynoob@gmail.com <br> */public class B { public static void main(String[] args) { A a = new A(); a.setOnClickListener(new A.OnClickListener() { @Override public void onClick(int position) { System.out.println("我是B" + position); } }); a.doSomeThing(); }}注释写的都很详细,我们再把过程理一遍
首先B作为程序的主入口, 先new出A的一个实例a,相当于Android中的new Button或者findViewById,然后为a的成员变量mOnclickListener赋值,此处采用匿名内部类的方式new了一个接口,重写并具体实现了onClick方法,打印我是B和当前的i值,到此还没有体现任何接口的功能,别急,下面执行a.doSomeThing(),我们来具体的分析这个方法的执行流程,a先睡眠2秒,a使用onClickListenerCallBack(i),传递了当前i的值。在onClickListenerCallBack(int position)中拿到i,并使用自身的mOnClickListener.onClick()方法,而mOnClickListener的值是B类设置的,并且重写的onClick的方法,由于多态的存在,此时会调用在B类中传入的具体方法,即执行B中重写的方法。站在B的角度来看,当a做某事时会把自身的position值传给B,并且B拿到position可以去实现自己的行为,比如打印一条当前position的信息。如此重复循环10次。
至此,一个完整的回调过程就解开了!
把它对应成Android的点击流程,在BActivity中拥有Button a,当a执行某方法时就会回调B中重写的行为!
我是一个非IT毕业的小罗罗,Java也都是自学的,所以基础很差,但在Android开发的过程中慢慢的体会着,真的是感谢google的开源精神,上面有我的邮箱,欢迎小伙伴们多交流!
1 0
- Android接口回调深入理解
- 深入理解接口(转)
- 深入理解Java接口
- 深入理解Java接口
- 深入理解Java接口
- 深入理解SERDES接口
- 深入理解JAVA接口
- 接口的深入理解
- 深入理解SERDES接口
- android中接口回调的理解
- Android回调接口简单理解
- Android对回调接口的理解
- 关于android接口回调的理解
- Android之深入理解Adapter的四个接口
- 深入理解Java接口(一)
- 深入理解Java接口(一)
- 深入理解Java接口(一)
- 【C#】C#接口深入理解
- DisplayMetrics
- Javascript 数据类型
- 自定义圆图片
- python 查看32位还是64位的
- eclipse工程导入Android studio 有些包无效的解决
- Android接口回调深入理解
- Android之注解IOC(二)
- redis学习笔记(19)---事务
- html和htm、html5对比
- Ubuntu SSH 私匙和公匙的产生原理阐述
- ADTS和LATM的AAC格式
- 局域网实现VLAN实例
- 跨平台开发的两种方法及其对比
- java.math.BigDecimal cannot be cast to java.lang.String解决方法