謝謝,我看了一下AbstractTextEditor實現。因爲我只想要編輯之間,而不是一個編輯器內的不同位置之間進行導航,我想通了,最簡單的實現應該是這樣的:
public class MyEditor extends EditorPart implements INavigationLocationProvider {
public static final String ID = "MyEditor";
...
@Override
public INavigationLocation createEmptyNavigationLocation() {
return new MyNavigationLocation(this);
}
@Override
public INavigationLocation createNavigationLocation() {
return new MyNavigationLocation(this);
}
}
public class MyNavigationLocation extends NavigationLocation {
public MyNavigationLocation(IEditorPart part) {
super(part);
}
@Override
public boolean mergeInto(INavigationLocation location) {
return false;
}
@Override
public void restoreLocation() {
}
@Override
public void restoreState(IMemento memento) {
}
@Override
public void saveState(IMemento memento) {
}
@Override
public void update() {
}
}
我的問題是,它仍然不起作用。我希望失敗必須在別的地方。也許我錯過了Eclipse命令配置中的一些東西。有任何想法嗎?
編輯:
問題在於在類NavigationHistory的markLocation()方法。它調用私有方法addEntry()。私有變量ignoreEntries在我的情況下設置爲1.這就是爲什麼我不能在歷史記錄中標記位置的原因。不幸的是我還沒有想出的是,爲什麼ignoreEntries設置爲1 Eclipse文檔沒有提到它: http://help.eclipse.org/indigo/index.jsp?topic=%2Forg.eclipse.platform.doc.isv%2Freference%2Fapi%2Forg%2Feclipse%2Fui%2FINavigationHistory.html
/*
* Adds a location to the history.
*/
private void addEntry(IEditorPart part) {
if (ignoreEntries > 0 || part == null) {
return;
}
...
}
第二個編輯:
我發現,每次新的編輯器通過NavigationHistory的markEditor()方法添加歷史記錄。標記在顯示線程中完成,並且直到標記過程完成後才能添加更多標記。如果要在編輯器打開後直接標記位置,則必須在顯示線程中調用markLocation()。不過,我的問題依然存在。 NavigationHistory中的後退和前進NavigationHistoryAction爲null。這就是爲什麼我的UI圖標保持灰色顯示。有人可以向我發送指定導航命令的plugin.xml部分嗎?然後我可以將其與我的配置進行比較。
我知道我正在挖舊帖,但你救了我的一天:)這也適用於RAP! – Jerome