Eclipse:如何将活动绑定到视图

时间:2013-01-21 08:25:11

标签: eclipse android-activity rcp

对于我的Eclipse rcp应用程序,我想使用活动来显示和隐藏一些视图。我阅读了有关活动的Eclipse文档,并尝试根据文档中的'使用基于表达式的活动'片段获取一个工作示例。

在第一步中,我创建了一个新视图,并在我的透视图类中添加了一个占位符:

layout.addPlaceholder(View1.ID, IPageLayout.RIGHT, 0.5f, layout.getEditorArea());

然后我添加了我的活动,当'表达式和绑定时启用了':

<extension point="org.eclipse.ui.activities">
    <activity id="org.project.activities.activity1" name="myActivity">
       <enabledWhen>
           <with variable="org.project.activities.sessionState">
               <equals value="loggedIn"></equals>
           </with>
       </enabledWhen>
    </activity>
</extension>
<activityPatternBinding
    activityId="org.project.activities.activity1"
    pattern="org.project.activities/org.project.activities.View1">
</activityPatternBinding> 

在最后一步中,我添加了我的源代码提供者:

public class ActivitiySourceProvider extends AbstractSourceProvider {
   public static final String SESSION_STATE = "org.project.activities.sessionState";
   private static final String LOGGED_OUT = "loggedOut";
   private static final String LOGGED_IN = "loggedIn";
   private static final String[] SOURCE_NAMES = new String[] { SESSION_STATE };
   private boolean loggedIn = false;

   @Override
   public Map<String, String> getCurrentState() {
       Map<String, String> map = new HashMap<String, String>(1);
       String value = loggedIn ? LOGGED_IN : LOGGED_OUT;
       map.put(SESSION_STATE, value);
       return map;
   }

   @Override
   public String[] getProvidedSourceNames() {
       return SOURCE_NAMES;
   }

   public void setLoggedIn() {
       loggedIn = !loggedIn;
       String value = loggedIn ? LOGGED_IN : LOGGED_OUT;
       fireSourceChanged(ISources.WORKBENCH, SESSION_STATE, value);
   }
}

当我启动测试应用程序时,我的视图'View1'被隐藏,当我切换变量时,视图仍然隐藏。要切换我的变量我使用了句柄,我没有收到任何例外。我还尝试在应用程序启动时将我的变量设置为显式的'loggedOut',但我也没有用。

我是否错过了文档中的内容?

1 个答案:

答案 0 :(得分:0)

您是否在扩展点ActivitySourceProvider的扩展中注册了org.eclipse.ui.services作为源提供商?否则它将不会用于表达式评估。