首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

Android 4.0台历(calendar)源码分析之CalendarController(事件分发)

2013-03-27 
Android 4.0日历(calendar)源码分析之CalendarController(事件分发)日历在主体上只有一个AllInOneActivity

Android 4.0日历(calendar)源码分析之CalendarController(事件分发)

日历在主体上只有一个AllInOneActivity.java,然后分别是各种Fragment。这就需要一个中介来统一处理他们的关系,AllInOneActivity和Fragment之间,以及不同的Fragment之间的通信(主要是事件),都是通过CalendarController这个类来完成的。

当在某个Fragment中想要发出一个事件的时候,该Fragment会用到自己实例化的CalendarController对象(mController),例如下面的样子:


AllInOneActivity中对四个视图的fragment进行了注册,当然并不是同时,假如当前是月视图,注册的当然是MonthByWeekFragment,要想了解如何注册的请看AllInOneActivity的setMainPane方法。或者参考我讲解AllInOneActivity的那篇文章。

 

其实,我们应该注意到,registerEventHandler只是对Fragment进行了注册(还有一些非AllInOneActivity的activity这里不讲解),但是事件处理对象中还有重要的AllInOneActivity,AllInOneActivity也有handleEvent的能力,AllInOneActivity为什么没有自己给自己注册一下呢,既然没有注册那么AllInOneActivity中的handleEvent方法不是永远不会被调用么?

 

当然不是AllInOneActivity也给自己注册了的,只不过是调用CalendarController的registerFirstEventHandler方法,方法定义如下:

12345678910111213141516171819if (event.eventType == EventType.LAUNCH_SETTINGS) {         launchSettings();         return;     }           // Launch Calendar Visible Selector     if(event.eventType == EventType.LAUNCH_SELECT_VISIBLE_CALENDARS) {         launchSelectVisibleCalendars();         return;     }


他会直接调用相应的函数,而不是交给handler处理。

Handler的这种处理机制运用了java中典型的回调机制,和观察者模式。

热点排行