你的位置:首页 > 操作系统

[操作系统]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.这里是接口、调用者、执行者

//相当于接口InApublic interface BoomWTC{ //获得拉登的决定 public benLaDengDecide(); // 执行轰炸世贸 public void boom();}//相当于class Apublic 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 Bpublic 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判断,执行轰炸。。。

对比来看:

androidOSmain
new activity.onMenuItemSelectednew 911.boom
fragment.onOptionItemSelectedTerroristAttack.attack

 

因此当用户点击“选项菜单”时,Fragment会收到onOptionItemSelected(MenuItem)方法的回调请求,就是androidOS最终会调用onOptionItemSelected()响应--点击选项菜单--这个事件