1

したがって、 と で識別される 2 つのコマンドがありPLAY_COMMAND_IDますSTOP_COMMAND_ID。各コマンドには、それぞれのハンドラがplayHandlerあり、stopHandler(これらは拡張AbstractHandlerクラスです)。

これらのコマンドは、ビューのツールバーにボタン スタイルで提供されます。基本的に私が欲しいのは、最初PLAY_COMMANDはアクティブですが、そうではありSTOP_COMMANDません。PLAY_COMMANDをクリックすると、 がアクティブになり、それSTOP_COMMAND自体が非アクティブになります ( PLAY_COMMAND)。STOP_COMMANDクリックしたときはその逆です。

だから私がすることはこのようなものです。最初は機能します(再生ボタンをクリックすると、停止ボタンがアクティブになり、再生ボタンが無効になります。停止ボタンをクリックすると、再生ボタンがアクティブになり、停止ボタンが無効になります。しかし、再生ボタンをクリックすると繰り返しますが、停止ボタンもアクティブな場合でも、再生ボタンはアクティブのままです)。ここで私のコードの何が問題なのですか:

private AbstractHandler playHandler, stopHandler, pauseHandler, stepHandler;
private IHandlerActivation playActivation, stopActivation, pauseActivation, stepActivation;
private void createHandlers(){
  final IHandlerService handlerService = (IHandlerService)getSite().getService(IHandlerService.class);
    playHandler = new AbstractHandler() {

      @Override
      public Object execute(ExecutionEvent event) throws ExecutionException {
        handlerService.deactivateHandler(playActivation);
        if(stopActivation == null){
          stopActivation = handlerService.activateHandler(STOP_COMMAND_ID, stopHandler);
        } else {
          handlerService.activateHandler(stopActivation);
        }
        return null;
      }
    };

    stopHandler = new AbstractHandler() {

      @Override
      public Object execute(ExecutionEvent event) throws ExecutionException {
        handlerService.deactivateHandler(stopActivation);
        handlerService.activateHandler(playActivation);
        return null;
      }
    };  
    playActivation = handlerService.activateHandler(PLAY_COMMAND_ID, playHandler);
  }
}

メソッドは、ビューのメソッドのcreateHandlers()最後で呼び出されます。createPartControl(Composite parent)

4

1 に答える 1

0

さて、ここで私が見つけたものです。メソッドのIHandlerActivation呼び出し時に返されるactivateHandler(IHandlerActivation)、が非アクティブ化されている場合、同じハンドラーのアクティブ化に再度使用することはできません。したがって、解決策は、を呼び出すhandlerService.activateHandler(commandID, playHandler)代わりに呼び出すことhandlerService.activateHandler(playActivation)です。

于 2012-05-01T03:51:15.243 に答える