這二個(gè)方法就是實(shí)現(xiàn)界面狀態(tài)持久化的關(guān)鍵,注意saveState方法是在IPersistable接口中定義的。這些我們暫時(shí)忽略,主要是看如何使用這些機(jī)制。 如果去看JDT的實(shí)現(xiàn)或是org.eclipse.ui.ide一些視圖的實(shí)現(xiàn),你可以發(fā)現(xiàn)一些比較常用的實(shí)現(xiàn)形式。下面先看一段示例
這是重寫你自定義視圖的init方法,定義一個(gè)全局的IMemento對(duì)象,初始化的時(shí)候?yàn)樗x值。并定義一系列的標(biāo)識(shí)常量,用來(lái)表示你要保存的數(shù)據(jù)的標(biāo)識(shí)。這一點(diǎn)與IDialogSettings是一致的。 下面是保存視圖實(shí)現(xiàn)代碼,如果你第一次接觸可能有點(diǎn)暈,不過(guò)沒關(guān)系,熟悉了以后你會(huì)發(fā)現(xiàn)Eclipse的內(nèi)部實(shí)現(xiàn)也是類似的。下面的代碼就是從Eclipse里面改過(guò)來(lái)的。
要保存的數(shù)據(jù)是key--value形式,可以定義Boolean Integer Float String等基本類型對(duì)應(yīng)的值,這些值就以key--value形式持久化到文件中。 上面的實(shí)現(xiàn)內(nèi)容其實(shí)就是把視圖中的樹組件中的二部分狀態(tài)轉(zhuǎn)換成數(shù)據(jù):展開元素和被選中元素。通過(guò)把它們轉(zhuǎn)換成String類型(其實(shí)就是樹路徑)保存起來(lái)。IMemento的具體用法請(qǐng)查找Eclipse幫助文檔。 完成了保存,下面我們看如何重新把數(shù)據(jù)取出來(lái),使得打開的時(shí)候還原之前關(guān)閉時(shí)的狀態(tài)。 init()方法調(diào)用的時(shí)候界面控件是還沒有被創(chuàng)建的,所以不能在init()方法中添加還原的方法,應(yīng)用在控件都創(chuàng)建完成后還原。
完成控件創(chuàng)建后就調(diào)用restoreState方法,這是我們自定義的用于還原視圖狀態(tài)的方法。下面看一下,內(nèi)容基本上就是saveState方法的逆向。
這些工作就可以完成視圖狀態(tài)的保存與還原,還有一個(gè)特別要注意的地方,你必須對(duì)插件的WorkbenchAdvisor類的public void initialize(IWorkbenchConfigurer configurer)方法進(jìn)行重寫,添加configurer.setSaveAndRestore(true);這個(gè)方法就可以打開保存機(jī)制。如果沒有這個(gè)步驟,上面的工作不會(huì)起任何效果。 GUI狀態(tài)的持久化都保存在運(yùn)行時(shí)生成的.metadata\.plugins目錄下的xml文件,你可以手動(dòng)去打開這些文件查看數(shù)據(jù)結(jié)果是否跟你預(yù)期的一樣。IEditorPart以及Perspective和其它的全局信息持久化的也是同樣的原理。只是復(fù)雜度不一樣。建議可以查看org.eclipse.ui.ide中的實(shí)現(xiàn)原理。
posted on 2007-10-31 08:46 liaojiyong 閱讀(1324) 評(píng)論(0) 編輯 收藏
Powered by: BlogJava Copyright © liaojiyong