android中的回调请求的个人理解
Fragment类提供了管理“选项菜单”的回调函数onCreateOptionMenu(Menu,MenuInflater),调用它可以--创建“选项菜单”。
在需要“选项菜单”时,Android-OS通过Activity的FragmentManager调用Fragment的onCreateOptionMenu(Menu,MenuInflater),创建出来。
当用户点击“选项菜单”时,Fragment会收到onOptionItemSelected(MenuItem)方法的回调请求。
//选项菜单可以包含多个菜单项,通过检查菜单项的ID,确定是哪一个,然后作出相应的动作。
那么什么是回调请求呢?????
从用户的角度看,当我点击“选项菜单”,会发生一件事(这个app是跳转到另一个activity)。
代码是在fragment中覆盖onOptionItemSelected(MenuItem){//跳转到另一个activity}。
先来看一个经典的回调函数的例子
模拟911事件-结果WTC(世贸大厦)被轰炸
1.这里是接口、调用者、执行者
//相当于接口InA public interface BoomWTC{ //获得拉登的决定 public benLaDengDecide(); // 执行轰炸世贸 public void boom(); } //相当于class A public class At$911 implements BoomWTC{//相当于【背景1】 private boolean decide; private TerroristAttack ta;//相当于【背景2】 public At$911(){ Date now=new Date(); SimpleDateFormat myFmt1=new SimpleDateFormat("yy/MM/dd HH:mm"); this.dicede= myFmt.format(dt).equals("01/09/11 09:44"); this.ta=new TerroristAttack(); } //获得拉登的决定 public boolean benLaDengDecide(){ return decide; } // 执行轰炸世贸 public void boom(){ ta.attack(new At$911);//class A调用class B的方法传入自己的对象,相当于【you call me】 } } //相当于class B public class TerroristAttack{ public TerroristAttack(){ } public attack(BoomWTC bmw){——这相当于【背景3】 if(bmw.benLaDengDecide()){/*class B在方法中回调class A的方法,相当于【i call you back】*/ } } }
2.这里是主函数
public class $911{ public static void main(String[] args){ At$911 $911=new At$911(); $911.boom();
} }
流程:在main()中创建911实例,调用boom()方法,该方法会调用911实例中的TerroristAttack实例的attack()方法,该方法新建911匿名实例,传入attack()。
TerroristAttack的attack(BoomWTC bmw)接受一个实现BoomWTC接口的实例,并用接口变量bmw来引用传入的911匿名实例。然后,bmw.benLaDengDecide()调用911的benLaDengDecide()方法,返回一个true(假设今天是9月11日),然后通过if判断,执行轰炸。。。
对比来看:
androidOS | main |
因此当用户点击“选项菜单”时,Fragment会收到onOptionItemSelected(MenuItem)方法的回调请求,就是androidOS最终会调用onOptionItemSelected()响应--点击选项菜单--这个事件
相关推荐
若不使用模块控制器或Include_Controller调用,Test Fragment是不执行的。Test Fragment主要是用来进行脚本重用。默认新建的Test Fragment,是禁用状态。