パラレルアクティビティホスト

Parallel Activity Host は、複数の子アクティビティを同時にアクティブ化することができます。アクティビティをアクティブ化すると、Parallel Activity Host がそのアクティビティを前面に表示します。

../../_images/parallel-activity-host.gif

Parallel Activity Host では、アクティビティをグループ化して、ノードツリーで定義した順序でグループを表示できます。グループ内のアクティビティをアクティブにすると、Parallel Activity Host がそのグループ内のアクティビティを前面に表示します。例えば、この方法でエンジン故障のような重要なメッセージを、電話の着信通知のような通常の通知の前に表示することができます。両方のグループで、Parallel Activity Host はアクティビティをアクティベーションの順序で表示します。

パラレルアクティビティホストの使用

Parallel Activity Host を使用するには:

  1. Activity Browser で create-root をクリックし、ルート Parallel Activity Host を作成します。

    Kanzi Studio は、RootPage ノード内に Parallel Activity Host ノードを作成します。

    ../../_images/activity-browser-create-root-pah.png ../../_images/node-tree-root-pah1.png
  2. ルート Parallel Activity Host の下の Activity Browser で アクティビティを追加 をクリックし、Create Activity を選択し、その Activity にプレハブを作成または割り当てます。

    例えば、Seatbelt、Phone Call、Engine Failure という名前のアクティビティを作成します。各アクティビティには、アクティビティのプレハブとして同じ名前を使用します。

    Kanzi Studio はアクティビティを作成し、それらを Parallel Activity Host に追加し、各アクティビティに対して Prefabs にプレハブを作成します。

    ../../_images/create-activity-and-prefab-seatbelt.png ../../_images/pah-seatbelt-phone-call-engine-failure-browser.png ../../_images/pah-seatbelt-phone-call-engine-failure.png
  3. アクティビティをアクティブまたは非アクティブにするために使用したいトリガーを持つノードを作成します。

    例えば、Toggle Button ノードを作成し、Toggle Button: Toggled On と Toggle Button: Toggled Off トリガーを使用します。

    ../../_images/node-tree-pah-toggle-button.png ../../_images/node-components-toggle-button.png
  4. Node Tree で前のステップで作成したノードを選択し、Node Components > Triggers Alt を押しながら右クリック でアクティビティをアクティブにするために使用したいトリガーを選択し、Activate Activity アクションを選択し、アクションセットで:

    • アクティビティをアクティブにしたい Parallel Activity Host を含む Target Item。

    • Activation Path をアクティビティにアクティベートしたい Parallel Activity Host のパスにします。

      Activity ノードを他のタイプのノードにネストする場合、パスには祖先の Activity ノードのみを含めます。

      ヒント

      Activity への完全なアクティベーションパスを取得するには、Activity Browser で Activity を右クリックし、Copy Activation Path を選択します。このコマンドは、最上位の Activity Host からその Activity までの全パスをコピーします。

      Activity Activation Path は Activities と Activity Hosts のみを含みます。

      ../../_images/activity-browser-copy-activation-path-pah.png
    ../../_images/add-activate-activity-action-pah.png ../../_images/activate-activity-configure-parallel-activity.png
  5. Node Components > Triggers Alt を押しながら右クリック で、アクティビティを非アクティブ化するために使用したいトリガーを選択し、Deactivate Activity アクションを選択し、アクションセットで:

    • Activation Path を Parallel Activity Host のパスにして、非アクティブ化したいアクティビティにします。

      Activity ノードを他のタイプのノードにネストする場合、パスには祖先の Activity ノードのみを含めます。

    • アクティビティを非アクティブ化したい Parallel Activity Host を含む Target Item へ。

    ../../_images/add-deactivate-activity-action-toggle-button.png ../../_images/deactivate-activity-configure-parallel-activity.png

Preview でトグルボタンをクリックして、Parallel Activity Host のアクティビティをアクティブ化および非アクティブ化します。

../../_images/activate-parallel-activities.gif

Parallel Activity Host での仮想化の制御

デフォルトで、アクティビティを非アクティブ化すると、Kanzi はそのアクティビティおよびその子アクティビティのアクティビティプロパティの値をシリアライズします。追加したアクティビティプロパティの値に加えて、アクティビティのフォーカスとアクティブ化状態に関する情報も含まれます。Kanzi は、他の非アクティビティプロパティのランタイム状態をシリアライズしないことに注意してください。

例えば、Kanzi がそのコンテンツをアンロードしても、テキストボックスを含むアクティビティが非アクティブな場合でも、Text Box にユーザーが入力した情報を保持することができます。これを実現するには、Text Box を含む Activity で、文字列のアクティビティプロパティを作成し、Text Box の Text プロパティと作成したアクティビティプロパティの間で双方向バインディングを作成します。

アクティビティの仮想化を制御できます。

アクティビティでの仮想化の制御

Preserve History プロパティを使用すると、Kanzi がそのアクティビティを非アクティブ化したときに、アクティビティ内のアクティビティプロパティのシリアル化を制御できます。

アクティビティ内で仮想化を制御するには、Activity Browser または Prefabs で、アクティビティプロパティ値のシリアル化を制御したいアクティビティを選択します。Properties で、Preserve History プロパティを追加し、次のように設定します:

  • アクティビティプロパティの値をシリアライズするように有効化されています。これはデフォルトの値です。

    シリアル化を有効にしてアクティビティを非アクティブ化すると、Kanzi はこのアクティビティとその子アクティビティのアクティビティプロパティの値を保持します。そのアクティビティをアクティブ化すると、Kanzi はこれらのノード内のアクティビティプロパティのシリアル化された値を復元します。

  • Activity プロパティの値のシリアル化を無効にするには、Disabled を使用します。

    シリアル化を無効にしてアクティビティを非アクティブ化すると、Kanzi はこのアクティビティおよびその子アクティビティのアクティビティプロパティの値を保持しません。そのアクティビティをアクティブ化すると、Kanzi はこれらのノード内のアクティビティプロパティの値をリセットします。

../../_images/properties-state-preservation-policy.png

アクションで仮想化を制御する

アクションを使用すると、アクティビティをアクティブ化する前または非アクティブ化した後に、アクティビティ内のアクティビティプロパティのシリアル化を制御できます。デフォルトで、Kanzi はアクティビティをアクティブ化するときにシリアル化された状態を復元します。

アクションで仮想化を制御するには:

  1. Activity Browser、Prefabs、または Node Tree で、アクティビティプロパティ値のシリアル化を制御したいノードを選択します。

  2. Node Components で、Alt を押しながら右クリック トリガーを使用して、アクティビティのシリアル化を制御したいトリガーを作成します。

    例えば、On Attached トリガーを作成します。

    ../../_images/add-on-attached.png
  3. アクティビティをアクティブ化する際の仮想化を制御するには、作成したトリガーで、Alt を押しながら右クリック アクションを選択し、Dispatch Message Action > Activity Host > Activate Activity アクションを選択し、アクション内で Reset History 引数を次のように設定します:

    • ユーザーがそのアクティビティをアクティブにしたときに、アクティビティプロパティのシリアライズされた値を復元するために無効にします。これはデフォルトの値です。

    • ユーザーがそのアクティビティをアクティブにしたときに、アクティビティプロパティのシリアライズされた値をリセットするように有効化されました。

    ../../_images/node-components-activate-activity-activity-state-restoration-policy.png
  1. アクティビティを非アクティブ化する際の仮想化を制御するために、作成したトリガー内で、Dispatch Message Action > Activity Host > Deactivate Activity アクションを作成します。

    例えば、このアプローチを使用して、ユーザーが選択をキャンセルし、アプリケーションがそのアクティビティを非アクティブ化したときに、アクティビティによって表示されるアプリケーションUIの状態をリセットします。

    ../../_images/node-components-deactivate-activity-activity-state-restoration-policy.png

Parallel Activity Host でのアクティビティの永続性の制御

デフォルトでは、アクティビティを非アクティブ化すると、Kanzi はそのアクティビティをノードツリーからデタッチし、アクティビティインスタンスを削除します。

Keep Activity Alive プロパティを使用すると、Kanzi がアクティビティを非アクティブ化したときのそのアクティビティの永続性を制御できます。

アクティビティの永続性を制御するには、Activity Browser または Prefabs で、永続性を制御したいアクティビティを選択します。Properties で、Keep Activity Alive プロパティを追加し、次のように設定します。

  • Detach and Destroy。Kanzi はアクティビティをノードツリーからデタッチし、アクティビティインスタンスを削除します。これがデフォルト値です。

  • Hide and Disable。Kanzi はアクティビティを破棄する代わりに、非表示にして無効にします。アクティビティを再びアクティブ化すると、Kanzi は非表示のアクティビティを復元し、同じアクティビティを表示します。このアクティビティの仮想化を無効にしても、このノードは非アクティブ化前と同じステートのままです。

    これにより、アクティビティを再びアクティブ化するときにアクティビティのインスタンス化を省略できます。

../../_images/properties-keep-alive.png

アクティビティのアクティベーション

アクティビティをアクティブにすると、Kanzi:

  1. プレハブを使用してアクティビティノードを作成します。

  2. アクティビティノードをノードツリーにアタッチします。

  3. アクティビティを表示します。

  4. アクティビティホストがキーのフォーカスを持ち、異なる設定がされていない場合、キーのフォーカスをアクティビティに設定します。アクティビティをアクティブ化する際にフォーカスを設定するかどうかを制御する。

  5. アクティビティの Activity Status プロパティを Active に設定し、ActivityConcept::ActivityActivatedMessage メッセージと ActivityConcept::StatusChangedMessage メッセージを送信します。アクティビティのプレハブにアクティブ化のトランジションアニメーションがある場合、アクティビティはまず Activating ステータスを経由します。アクティビティのステータス管理 を参照してください。

デフォルトで、アクティビティを非アクティブ化すると、Kanzi はそのアクティビティおよびその子アクティビティのアクティビティプロパティの値をシリアライズします。追加したアクティビティプロパティの値に加えて、アクティビティのフォーカスとアクティブ化状態に関する情報も含まれます。Kanzi は、他の非アクティビティプロパティのランタイム状態をシリアライズしないことに注意してください。

Parallel Activity Host での仮想化の制御 を参照してください。

アクティビティを有効化するには、次の方法を使用できます。

アクティビティがアクティブかどうかを確認する

アクティビティがアクティブかどうかを確認するには、そのアクティビティノードの Activity Status プロパティの値をチェックしてください。

初期状態でアクティブなアクティビティの設定

Parallel Activity Host 内のどのアクティビティを初期状態でアクティブにするかを設定するには、以下の手順に従います。

  • Activity Browser で、Parallel Activity Host がアクティブになったときにアクティブにしたい Activity を選択します。

  • サイドパネルで、InitiallyActive プロパティを有効にします。

アクティビティの InitiallyActive プロパティを有効にすると、Parallel Activity Host は、明示的にアクティブ化しなくても、ホスト自体がアクティブになったときにそのアクティビティをアクティブにします。

Parallel Activity Host では、複数のアクティビティに対して InitiallyActive プロパティを有効にできます。

../../_images/set-is-initially-active-parallel.png

Activate Activity メッセージでアクティビティをアクティベートする

Activate Activity メッセージを使用する場合:

  • アクティビティをアクティブ化する条件は、プロパティの値で表現するには複雑すぎます。

  • アクティビティホスト内のアクティビティの数を事前に知ることはできません。

Activate Activity メッセージでアクティビティをアクティブ化するには、

  1. 複数の Activities を持つ Activity Host を作成します。

    ../../_images/pah-seatbelt-phone-call-engine-failure.png ../../_images/pah-seatbelt-phone-call-engine-failure-browser.png
  2. トリガーを持つノードを作成し、それを使用して Activity をアクティブにします。

    例えば、Toggle Button ノードを作成し、Toggle Button: Toggled On と Toggle Button: Toggled Off トリガーを使用して、Parallel Activity Host 内のアクティビティをアクティブ化および非アクティブ化します。

    ../../_images/node-tree-pah-toggle-button.png ../../_images/node-components-pah-toggle-button.png
  3. Node Tree で、前のステップで作成したトリガーを持つノードを選択し、Node Components > Triggers Alt を押しながら右クリック でアクティビティをアクティブにするために使用したいトリガーを選択し、Dispatch Message Action > Activity Host > Activate Activity メッセージを選択し、アクションセットで:

    • Activity をアクティブにしたい Activity Host を含む Target Item へ。

    • Activity Host から Activity までのパスを Activation Path にアクティブ化します。

      Activity ノードを他のタイプのノードにネストする場合、パスには祖先の Activity ノードのみを含めます。

      ヒント

      Activity への完全なアクティベーションパスを取得するには、Activity Browser で Activity を右クリックし、Copy Activation Path を選択します。このコマンドは、最上位の Activity Host からその Activity までの全パスをコピーします。

      Activity Activation Path は Activities と Activity Hosts のみを含みます。

      ../../_images/activity-browser-copy-activation-path-pah.png
    ../../_images/add-activate-activity-action-pah.png ../../_images/activate-activity-configure-pah.png
  4. Parallel Activity Hostでアクティビティを非アクティブ化するには、前の手順を繰り返し、非アクティブ化したいアクティビティに使用するトリガーに Dispatch Message Action > Activity Host > Deactivate Activity メッセージを追加します。

    ../../_images/deactivate-activity-configure-pah.png

Preview でトグルボタンをクリックして、Parallel Activity Host のアクティビティをアクティブ化および非アクティブ化します。

../../_images/activate-parallel-activities.gif

Apply Activation Action でアクティビティをアクティブ化する

Apply Activation Action は、Data Trigger 内でこのアクションが含まれている限り、アクティビティをアクティブに保ちます。トリガー条件が満たされなくなると、Kanzi はアクティビティの状態をアクションが適用される前の状態にロールバックします。Apply Activation Action は Data Trigger と一緒にのみ使用してください。

アクティビティのアクティベーションをアプリケーションロジックと同期させたい場合は、Apply Activation Action を使用します。

例えば、プロパティが特定の値を持つときにクラスターインジケーターを表示するために Apply Activation Action を使用し、そのプロパティの値がその値でなくなったときに同じインジケーターを非表示にします。

Data Trigger を使用する場合、Data Trigger のアクションは他のトリガーのアクションよりも優先されることに注意してください。

チュートリアル: アプリケーションUIを制御する を完了することで、アクティビティのアクティベーション状態を制御するために、Data Trigger を Apply Activation Action と一緒に使用する方法を学ぶことができます。

Apply Activation Action を使用してアクティビティをアクティブ化するには:

  1. Activity Browser で、Activity を持つ Parallel Activity Host を作成します。

    例えば、Parallel Activity Host ノードを作成し、Activity に LowBattery という名前を付けます。

    ../../_images/apply-activation-pah-structure.png
  2. Prefabs に、アクティビティが表示するコンテンツを追加します。

    例えば、低バッテリー警告のための画像を追加します。

    ../../_images/apply-activation-pah-activity-content.png
  3. (オプション) In the Properties, set the size of the Parallel Activity Host and position of the Activity in the Activity Host.

    ../../_images/apply-activation-pah-set-activity-host-size.png ../../_images/apply-activation-pah-position-activity.png
  4. 最初のステップで作成したアクティビティのアクティベーション状態を制御したいノードを作成します。

    例えば、Asset Packages から Slider を Node Tree の Parallel Activity Host ノードにドラッグします。Properties で、Slider をアクティビティホストに配置します。

    ../../_images/apply-activation-pah-drag-slider.gif ../../_images/apply-activation-pah-position-slider.png
  5. Apply Activation Action を持つ Data Trigger を作成します。

    1. Node Tree で Parallel Activity Host ノードを選択し、Node Components Alt を押しながら右クリック Triggers で Data Trigger を選択します。

      ../../_images/apply-activation-node-tree-pah.png ../../_images/apply-activation-create-data-trigger.png
    2. Expression の Data Trigger で 式を開く をクリックし、Node Tree で Slider を選択し、Properties から Value プロパティを Expression フィールドにドラッグして、式を編集します。

      {@Slider/RangeConcept.Value}<=20
      

      この条件式は、True または False のいずれかに評価されなければなりません。ソースとしては、プロパティまたはデータソースからのデータオブジェクトを使用できます。

      Save をクリックします。

      この方法で、Data Trigger を設定して、Slider の Value プロパティの値が20以下である場合に Apply Activation Action を実行します。

      ../../_images/apply-activation-expression-pah.png
    3. Data Trigger Alt を押しながら右クリック Actions で、Apply Activation Action を選択します。

      ../../_images/apply-activation-create-action-slider.png
    4. Apply Activation Action セット内で:

      • Activity Host Path から . へ

      • Activity Activation Path から LowBattery へ

      Activity Activation Path プロパティで設定したアクティビティへのパスは、Activity Host Path プロパティで設定したアクティビティホストノードに対して相対的です。

      Activity Browser は、Activity Host が data-trigger アイコンを持つ Data Trigger を持っていることを示します。

      ../../_images/apply-activation-set-lowbattery.png

    ヒント

    Activity への完全なアクティベーションパスを取得するには、Activity Browser で Activity を右クリックし、Copy Activation Path を選択します。このコマンドは、最上位の Activity Host からその Activity までの全パスをコピーします。

    Activity Activation Path は Activities と Activity Hosts のみを含みます。

    ../../_images/activity-browser-copy-activation-path-pah.png

Preview でスライダーノブをドラッグします。

  • スライダーの Value プロパティの値が20以下の場合、Data Trigger は Apply Activation Action で設定したアクティビティをアクティブにします。

    Apply Activation Action は、このアクションを含む Data Trigger で条件が満たされている限り、アクティビティをアクティブに保ちます。

  • スライダーの Value プロパティの値が21以上の場合、Data Trigger は Apply Activation Action で設定したアクティビティを非アクティブ化します。

    トリガー条件が満たされなくなると、Kanzi はアクションが適用される前の状態にアクティビティの状態をロールバックします。

../../_images/apply-activation-pah-activation-demo.gif

ヒント

アプリケーション開発中に、Activity Browser サイドパネルでこれらの Data Trigger ツールを使用します。

ツール

ディスクリプション (Description)

../../_images/show-data-trigger-icon.png

Data Trigger がどこにあるか、そしてその Data Trigger のソースとターゲットのアクティビティがどこにあるかを示します。

../../_images/apply-data-trigger-icon.png

Data Trigger を適用したときの状態をシミュレートします。

これにより、アプリケーション内のプロパティ値を変更することなく、データトリガーの条件が満たされたときにアプリケーションの状態を確認することができます。

../../_images/data-trigger-node-components-icon.png

選択された Data Trigger を Node Components ウィンドウに表示します。

../../_images/ab-helpers.png

APIでアクティビティを使用する

詳細については、Activity2D、Activity3D、ParallelActivityHost2D、および ParallelActivityHost3D クラスを参照してください。

関連項目

チュートリアル: アプリケーションUIの構造

チュートリアル: アプリケーションUIを制御する