以前我也不懂什么是回调函数
2015-10-31 14:09
363 查看
转载请注明出处:/article/10037879.html
我这个人就是这样,如果想弄明白一个工具,我必须首先了解故事发生在什么样的场景,从而能够去了解为满足这样的情形 工具的运作机制
直到学了Fragment,我才弄明白回调函数存在的意义
现实中我们可能会遇到类似的情形,即存在多个Activity,它们的布局大致相同,但按钮的点击事件不同
如果每个Activity都写同样的布局,实例化同样的控件,这样重复代码就很多,也不易于编辑和管理
因此想到将布局和控件的实例化写在一个fragment中,供多个Activity调用
那么问题来了,原本是每个Activity为自己单独写的按钮点击事件,现在多个Activity调用同一个fragment,点击事件怎么写?难道要将所有Activity的按钮点击事件都写在一个fragment中,然后传值判断是哪个Activity调用的就执行哪个方法?
理论上可行,但是这样不能够体现代码复用的精神
我们希望的结果是解耦,即,不管哪个Activity的去留,fragment自身的内容都不用做改动
因此诉诸回调函数:
首先在fragment中声明一个接口,接口中定义一个空方法体
然后在fragment的按钮点击事件中调用这个空方法体,方法的具体内容留给Acitivity去实现
这样,多个Acitivity既能调用同一个fragment,又能在各自的Activity类中定义不同的按钮点击事件
如ActivityOne中:
就是这样
回调函数就是,在一个(用于复用的)类中,通过接口定义一个空方法体,在相应的操作中调用这个空方法体,并将方法的具体实现放在实现类中(,从而达到代码复用的目的)
转载请注明出处:/article/10037879.html
我这个人就是这样,如果想弄明白一个工具,我必须首先了解故事发生在什么样的场景,从而能够去了解为满足这样的情形 工具的运作机制
回调函数就是其中一个
以前我也不懂什么是回调函数,百度Google输入“回调函数”,网上教程大都举些奇奇怪怪的场景“帮助你理解”回调函数是怎么一回事,然而“小明现在没空,待会帮你解决问题并回复”的奇葩示例无益于帮我理解回调函数,反倒越看越晕直到学了Fragment,我才弄明白回调函数存在的意义
场景:代码复用
现实中我们可能会遇到类似的情形,即存在多个Activity,它们的布局大致相同,但按钮的点击事件不同
如果每个Activity都写同样的布局,实例化同样的控件,这样重复代码就很多,也不易于编辑和管理
因此想到将布局和控件的实例化写在一个fragment中,供多个Activity调用
那么问题来了,原本是每个Activity为自己单独写的按钮点击事件,现在多个Activity调用同一个fragment,点击事件怎么写?难道要将所有Activity的按钮点击事件都写在一个fragment中,然后传值判断是哪个Activity调用的就执行哪个方法?
理论上可行,但是这样不能够体现代码复用的精神
我们希望的结果是解耦,即,不管哪个Activity的去留,fragment自身的内容都不用做改动
因此诉诸回调函数:
首先在fragment中声明一个接口,接口中定义一个空方法体
public interface ButtonClickListener { voidbuttonClick(); }
然后在fragment的按钮点击事件中调用这个空方法体,方法的具体内容留给Acitivity去实现
bt.setOnClickListener(newView.OnClickListener() { @Override public void onClick(View view) { //此处安插一个空方法体,如果Activity实例化了这个接口,就实现这个回调函数 if(getActivity()instanceof ButtonClickListener) ((ButtonClickListener) getActivity()).buttonClick(); } });
这样,多个Acitivity既能调用同一个fragment,又能在各自的Activity类中定义不同的按钮点击事件
如ActivityOne中:
public class ActivityOne extends AppCompatActivity implements FragmentOne.ButtonClickListener { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_one); getFragmentManager().beginTransaction() .add(R.id.frag_container, new FragmentOne()) .commit(); } @Override public void buttonClick() { //此处写入具体的实现 Toast.makeText(getApplicationContext(), "我是Activity One啊", Toast.LENGTH_SHORT).show(); } }
就是这样
回调函数就是,在一个(用于复用的)类中,通过接口定义一个空方法体,在相应的操作中调用这个空方法体,并将方法的具体实现放在实现类中(,从而达到代码复用的目的)
此处附上源码实例
http://download.csdn.net/detail/github_32453995/9229715转载请注明出处:/article/10037879.html
相关文章推荐
- WCF实体对象客户端引用时生成多余参数"××Specified",且值类型数据赋值无法传递值时必须付××Specified=true
- 求二叉树叶子节点的最浅深度
- Android-IOS移动开发技术-1:XMPP JID 和通信原语有3种:message、presence和IQ
- 织梦文章生成html有标题但是内容部分空白问题
- 游戏开发Camera之Cinematic Camera-深度
- 在Android手机上安装linux系统
- MAC 搭建腾讯云(centOS) apache+php+mysql 持续更新...
- JavaBean List Map Json的转化
- 大道至简第五章读后感
- 简单的异步任务工具——rq 的使用教程
- leetcode之Word Pattern
- webview隐藏滚动条
- 康大亮Objective-C全部语法整理
- 游戏开发Camera之Cinematic Camera-深度
- 怎么在Eclipse上运行静态网页
- 计算机网络基础
- Unity Internal Compiler Error 报错拾遗
- 电池厂家
- PHP正则表达式完全复习手册
- Android属性allowBackup安全风险浅析