使用历史管理,用户可以用浏览器的后退和前进按钮来导航程序。比如,用户可以单击TabNavigator或者 Accordion容器的选项卡,然后单击浏览器的后退按钮回到先前的选项卡。
Flex中的所有导航容器都自动支持历史管理。如果想关闭这些容器的历史管理,只要把其historyManagementEnabled属性设置为false即可。如下所示:
<mx:TabNavigator historyManagementEnabled = “false”>
ViewStack容器的历史管理默认情况下是禁用的。
特别要注意的是在预览本地文件时,IE不能启用历史管理,只有将文件部署到Web服务器或是通过HTTP URL 访问文件才能启用。
当然也可以构建自定义的历史管理器,
自定义管理类实现的6个步骤:
(1) 用HistoryManager类注册该组件。
(2) 在该组件中实现loadState()方法。
(3) 在该组件中实现saveState()方法。
(4) 在该组件实现toString()方法。
(5) 调用HistoryManager类的各种静态方法。
如下所示:
这是自己参考的《Flex 权威指南》,没写详细,真正用的时候还得查阅具体资料。
<?xml version="1.0" encoding="utf-8"?>
<mx:HorizontalList xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
implements="mx.managers.IHistoryManagerClient"
creationComplete="registerWithHistoryManager()" height="142" width="492" dataProvider="{dataArr}">
<fx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import mx.managers.HistoryManager;
import mx.managers.IHistoryManagerClient;
[Bindable]
private var dataArr:ArrayCollection = new ArrayCollection([{name:'laopo'}, {name:'yaner'}]);
private function registerWithHistoryManager():void
{
//HistoryManager的save()方法保存了组件的当前状态,在第一次注册组件时,必须调用save()方法。
HistoryManager.register(this);
HistoryManager.save();
}
/**实现saveState方法*/
public function saveState():Object{
var state:Object = new Object();
state.selectedIndex = this.selectedIndex;
return state;
}
/**实现loadState方法*/
public function loadState(state:Object):void
{
var newIndex:int;
if(state){
newIndex = int(state.selectedIndex);
}else{
newIndex = -1;
}
if(newIndex != selectedIndex){
selectedIndex = newIndex;
//派发事件
}
}
]]>
</fx:Script>
<fx:Declarations>
<!-- 将非可视元素(例如服务、值对象)放在此处 -->
</fx:Declarations>
</mx:HorizontalList>