android中的回调请求的个人理解,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 |
new activity.onMenuItemSelected | new 911.boom |
fragment.onOptionItemSelected | TerroristAttack.attack |
因此当用户点击“选项菜单”时,Fragment会收到onOptionItemSelected(MenuItem)方法的回调请求,就是androidOS最终会调用onOptionItemSelected()响应--点击选项菜单--这个事件