前面讲到,在bindWorkspace中涉及了以下几个回调方法:
startBinding();
bindScreens();
bindWorkspaceItems();
finishBindingItems();
Launcher类实现了这些回调接口,startBinding()主要完成了数据清空和状态重置等预备操作,这里不详细分析,接下来我们来看其他方法在Launcher类中的具体实现。
我们从bindScreen()开始,bindScreen完成了页面的添加工作,下面是页面添加的流程图:
由图可以看出,有3种类型的screen,有序Screen列表中包含的非空页面,空页面和自定义页面。在Launcher类中,bindScreens()的具体实现如下:
@Override
public void bindScreens(ArrayList<Long> orderedScreenIds) {
// 根据orderedScreenIds来添加页面
bindAddScreens(orderedScreenIds);
// 如果orderedScreenIds的大小为0,即没有添加任何页面,需要添加一个空的页面
if (orderedScreenIds.size() == 0) {
mWorkspace.addExtraEmptyScreen();
}
// 如果有自定义页面,则将自定义页面添加到最左
if