エクスクルーシブアクティビティホスト¶
Exclusive Activity Host は、子アクティビティのうち一度に1つだけをアクティブにすることができます。Exclusive Activity Host の1つの子アクティビティがアクティブな場合、そのアクティビティホストの他のすべてのアクティビティは非アクティブになります。例えば、Exclusive Activity Host を使用して、アプリケーション内のビューを切り替えることができます。
排他的アクティビティホストの使用¶
Exclusive Activity Host を使用するには、
Activity Browser で、
をクリックし、ルート Exclusive Activity Host を作成します。Kanzi Studio は、Screen ノードの最初の子ノードとして Exclusive Activity Host を作成します。
Activity Browser で、ルート Exclusive Activity Host の下にある
をクリックし、Create Activity を選択して、その Activity にプレハブを作成または割り当てます。例えば、Media、Navigation、Phone という名前のアクティビティを作成します。各アクティビティには、アクティビティプレハブに同じ名前を使用します。
Kanzi Studio はアクティビティを作成し、それらをエクスクルーシブアクティビティホストに割り当て、各アクティビティに対して Prefabs にプレハブを作成します。
Activity Browser のすべてのアクティビティにはプレハブがあります。Activity Browser で Activity を追加する際には、既存のプレハブを選択するか、アクティビティ用のプレハブを作成します。選択できるプレハブは、Activity ノードタイプのものに限られます。
Activity Browser に追加するアクティビティは、アプリケーションノードツリーのノードではありません。それらは、これらのアクティビティをアクティブにしたときに Kanzi が作成する構造のビジュアライゼーションに過ぎません。
エクスクルーシブアクティビティホストで、どのアクティビティがアクティブであるかを制御するために使用するプロパティタイプを作成します。
Activity Browser で、Exclusive Activity Host を右クリックし、Create Controller Property を選択して、プロパティタイプのデータタイプを選択します。
Exclusive Activity Host は Controller Property プロパティを使用して、その Exclusive Activity Host でどの Activity がアクティブであるかを設定および制御します。Activity の状態を変更するには、次の方法も使用できます:
Activate Activity メッセージを持つ任意のトリガー
Apply Activation アクションを持つ Data Trigger
例えば、プロパティタイプを列挙データ型で作成するには、Create Controller Property > Enum を選択します。
プロパティタイプに名前を付け、OK をクリックします。
例えば、プロパティタイプを MyActivities と名付けます。
Kanzi Studio:
プロパティタイプを作成します。
列挙データ型でプロパティタイプを作成する場合、Kanzi Studio はその Exclusive Activity Host からの Activities の名前を持つ列挙キーでプロパティタイプを作成します。
Exclusive Activity Host で、作成したプロパティタイプを追加し、Controller Property プロパティを作成したプロパティタイプに設定します。
この Exclusive Activity Host でどの Activity がアクティブであるかを設定するには、Exclusive Activity Host で作成されたプロパティタイプの値を設定できます。
Prefabs で、各 Activity プレハブにコンテンツを追加します。
例えば、各 Activity で、その Activity の名前を持つ Image ノードを作成します。
Activity Browser で、アクティブにしたいアクティビティに Controller Property プロパティを設定します。
Activity Browser は、アプリケーション内で Activities のアクティベーションをシミュレートします。Kanzi アプリケーションで Activities をアクティベートするには、トリガーとアクションを使用します。アクティビティのアクティベーション を参照してください。
アクティビティをアクティブにすると、Kanzi:
プレハブを使用してアクティビティノードを作成します。
アクティビティノードをノードツリーにアタッチします。
アクティビティを表示します。
アクティビティホストがキーのフォーカスを持ち、異なる設定がされていない場合、キーのフォーカスをアクティビティに設定します。アクティビティをアクティブ化する際にフォーカスを設定するかどうかを制御する。
アクティビティの Activity Status プロパティを Active に設定し、
ActivityConcept::ActivityActivatedMessageメッセージとActivityConcept::StatusChangedMessageメッセージを送信します。アクティビティのプレハブにアクティブ化のトランジションアニメーションがある場合、アクティビティはまず Activating ステータスを経由します。アクティビティのステータス管理 を参照してください。
コントローラプロパティへの書き込みについて¶
Controller Property は、どの子 Activity をアクティブ化するかを識別するセレクターです。Controller Property に書き込むと、Exclusive Activity Host は一致する子アクティビティをアクティブ化します。アクティブなアクティビティが変わると、アクティビティホストは Activity Browser でそのアクティビティに設定した Controller Property の値を書き戻します。この書き戻しはアクティビティ名によって重複排除されるため、同じアクティビティに対して繰り返されることはありません。
起動時に Kanzi はアクティブなアクティビティを複数回設定します。たとえば、アクティビティホストのコンテンツを適用するとき、アクティビティホストをアタッチするとき、そして Controller Property のソースを初めて解決するときです。プロパティを設定すると、値が変わったときだけでなく書き込みのたびにオブザーバーに通知されるため、Controller Property は初期化中に何度か変化します。実際の値の変化にのみ反応するには、On Property Change トリガーの Ignore Identical Value オプションを使用します。
Controller Property をバインドする場合は、双方向バインディングを使用します。アクティビティホストによる Controller Property への最初の書き込みは、そのプロパティへの他の書き込みと同様に一方向のバリューソースバインディングを削除するため、一方向バインディングは機能しません。双方向バインディングは、アタッチ時と、データコンテキストが解決されたときに再度 Controller Property を上書きするため、その時点より前に書き込んだ値に依存しないでください。値ソースバインディング を参照してください。
アクティビティホストがデータオブジェクトに書き込まないようにするには、Data Trigger と、Controller Property ソースを持たない Apply Activation Action を使用してアクティビティをアクティブ化します。アクティビティをアプライアクティベーションアクションでアクティベートする を参照してください。
排他的アクティビティホストでの仮想化の制御¶
デフォルトで、アクティビティを非アクティブ化すると、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 はこれらのノード内のアクティビティプロパティの値をリセットします。
アクションで仮想化を制御する¶
アクションを使用すると、アクティビティをアクティブ化する前または非アクティブ化した後に、アクティビティ内のアクティビティプロパティのシリアル化を制御できます。デフォルトで、Kanzi はアクティビティをアクティブ化するときにシリアル化された状態を復元します。
アクションで仮想化を制御するには:
Activity Browser、Prefabs、または Node Tree で、アクティビティプロパティ値のシリアル化を制御したいノードを選択します。
Node Components で、Alt を押しながら右クリック トリガーを使用して、アクティビティのシリアル化を制御したいトリガーを作成します。
例えば、On Attached トリガーを作成します。
アクティビティをアクティブ化する際の仮想化を制御するには、作成したトリガーで、Alt を押しながら右クリック アクションを選択し、Dispatch Message Action > Activity Host > Activate Activity アクションを選択し、アクション内で Reset History 引数を次のように設定します:
ユーザーがそのアクティビティをアクティブにしたときに、アクティビティプロパティのシリアライズされた値を復元するために無効にします。これはデフォルトの値です。
ユーザーがそのアクティビティをアクティブにしたときに、アクティビティプロパティのシリアライズされた値をリセットするように有効化されました。
エクスクルーシブアクティビティホストでのアクティビティの永続性の制御¶
デフォルトでは、アクティビティを非アクティブ化すると、Kanzi はそのアクティビティをノードツリーからデタッチし、アクティビティインスタンスを削除します。
Keep Activity Alive プロパティを使用すると、Kanzi がアクティビティを非アクティブ化したときのそのアクティビティの永続性を制御できます。
アクティビティの永続性を制御するには、Activity Browser または Prefabs で、永続性を制御したいアクティビティを選択します。Properties で、Keep Activity Alive プロパティを追加し、次のように設定します。
Detach and Destroy。Kanzi はアクティビティをノードツリーからデタッチし、アクティビティインスタンスを削除します。これがデフォルト値です。
Hide and Disable。Kanzi はアクティビティを破棄する代わりに、非表示にして無効にします。アクティビティを再びアクティブ化すると、Kanzi は非表示のアクティビティを復元し、同じアクティビティを表示します。このアクティビティの仮想化を無効にしても、このノードは非アクティブ化前と同じステートのままです。
これにより、アクティビティを再びアクティブ化するときにアクティビティのインスタンス化を省略できます。
アクティビティのアクティベーション¶
アクティビティをアクティブにすると、Kanzi:
プレハブを使用してアクティビティノードを作成します。
アクティビティノードをノードツリーにアタッチします。
アクティビティを表示します。
アクティビティホストがキーのフォーカスを持ち、異なる設定がされていない場合、キーのフォーカスをアクティビティに設定します。アクティビティをアクティブ化する際にフォーカスを設定するかどうかを制御する。
アクティビティの Activity Status プロパティを Active に設定し、
ActivityConcept::ActivityActivatedMessageメッセージとActivityConcept::StatusChangedMessageメッセージを送信します。アクティビティのプレハブにアクティブ化のトランジションアニメーションがある場合、アクティビティはまず Activating ステータスを経由します。アクティビティのステータス管理 を参照してください。
デフォルトで、アクティビティを非アクティブ化すると、Kanzi はそのアクティビティおよびその子アクティビティのアクティビティプロパティの値をシリアライズします。追加したアクティビティプロパティの値に加えて、アクティビティのフォーカスとアクティブ化状態に関する情報も含まれます。Kanzi は、他の非アクティビティプロパティのランタイム状態をシリアライズしないことに注意してください。
排他的アクティビティホストでの仮想化の制御 を参照してください。
アクティビティを有効化するには、次の方法を使用できます。
Activate Activity メッセージ。アクティビティをアクティベートアクティビティメッセージでアクティベートする を参照してください。
Set Property アクション。プロパティ設定アクションでアクティビティをアクティブ化する を参照してください。
Navigate To Next Activity と Navigate To Previous Activity のアクション。次または前のアクティビティをアクティブ化する を参照してください。
Apply Activation Action を参照してください。アクティビティをアプライアクティベーションアクションでアクティベートする を参照してください。
アクティビティがアクティブかどうかを確認する¶
アクティビティがアクティブかどうかを確認するには:
そのアクティビティの Activity Status プロパティの値を確認してください。
そのアクティビティの専用アクティビティホストで、Controller Property プロパティの値を確認してください。
最初にアクティブにするアクティビティの設定¶
Exclusive Activity Host で最初にアクティブにするアクティビティを設定するには、次の手順に従います。
Activity Browser で、Exclusive Activity Host がアクティブになったときにアクティブにしたい Activity を選択します。
サイドパネルで、InitiallyActive プロパティを有効にします。
アクティビティの InitiallyActive プロパティを有効にすると、Exclusive Activity Host は、明示的にアクティブ化しなくても、ホスト自体がアクティブになったときにそのアクティビティをアクティブ化します。明示的なアクティブ化はこの設定より優先されます。
Exclusive Activity Host では、InitiallyActive プロパティを有効にできるアクティビティは一度に 1 つだけです。別のアクティビティの InitiallyActive プロパティを有効にすると、以前のアクティビティのこのプロパティは設定解除されます。
アクティビティをアクティベートアクティビティメッセージでアクティベートする¶
Activate Activity メッセージを使用する場合:
アクティビティをアクティブ化する条件は、プロパティの値で表現するには複雑すぎます。
排他的アクティビティホスト内のアクティビティの数は事前にわかりません。
Activate Activity メッセージでアクティビティをアクティブ化するには、
Controller Property でアクティベーション状態を制御できる複数のアクティビティを持つ Exclusive Activity Host を作成します。
トリガーを持つノードを作成し、それを使用して Activity をアクティブにします。
例えば、Button ノードを作成し、Button: Click トリガーを使用します。
Node Tree で、前のステップで作成したノードを選択します。Node Components > Triggers で、アクティブにしたい Activity をトリガーする Alt を押しながら右クリック を選択し、Dispatch Message Action > Activate Activity メッセージを選択し、アクションセットで:
Activity をアクティブにしたい Exclusive Activity Host を含む Target Item へ。
Exclusive Activity Host から Activity までのパスを Activation Path にアクティブ化します。
Activity ノードを他のタイプのノードにネストする場合、パスには祖先の Activity ノードのみを含めます。
ヒント
Activity への完全なアクティベーションパスを取得するには、Activity Browser で Activity を右クリックし、Copy Activation Path を選択します。このコマンドは、最上位の Activity Host からその Activity までの全パスをコピーします。
Activity Activation Path は Activities と Activity Hosts のみを含みます。
アクティビティをアクティブにするには、Preview で作成したボタンをクリックします。
注釈
アクティビティが必要になったら、Code Behind からの場合も含め、すぐに ActivityHostConcept::ActivateActivityMessage を送信します。Exclusive Activity Host はアクティブ化パスを保存し、プレハブのロード完了後にそれを転送するため、タイマーや手動の保留アクションでプレハブを待つ必要はありません。
Exclusive Activity Host は、アタッチされてアクティビティのコンテンツを持った後でのみメッセージを処理します。それまでは、アクティベーション要求を警告なしに破棄します。外部インターフェイス経由で届く要求など、アプリケーションがその時点より前に要求を送信する可能性がある場合は、要求をキューに入れ、アクティビティホストがアタッチされた時点で送信してください。アクティビティホストがアタッチされているかどうかを確認するには、その ActivityElement.Attached プロパティを使用します。
アクティベーションパスは Activity Host からの相対パスです。Copy Activation Path コマンドはルートノードを含む完全なパスをコピーするため、メッセージアーギュメントのフォーマットと互換性がありません。既知の問題 を参照してください。
プロパティ設定アクションでアクティビティをアクティブ化する¶
アクティビティをアクティブにするために、アプリケーションのロジックがアクティビティをアクティブにするために Controller Property プロパティの値に依存している場合は、Set Property アクションを使用します。
Set Property アクションでアクティビティをアクティブ化するには:
Controller Property でアクティベーション状態を制御できる複数のアクティビティを持つ Exclusive Activity Host を作成します。
アクティビティをアクティブにするために使用したいトリガーを持つノードを作成します。
例えば、Button ノードを作成し、Button: Click トリガーを使用します。
Node Tree で、前のステップで作成したノードを選択します。Node Components > Triggers で、アクティビティをアクティブにするために使用したいトリガーを Alt を押しながら右クリック し、Set Property アクションを選択し、アクションセットで:
アクティビティをアクティブにしたい Exclusive Activity Host ノードに Target Item を配置します。
Target Property を Controller Property プロパティの Exclusive Activity Host で設定したプロパティタイプにします。
Activity でアクティブにしたい Controller Property プロパティの値に Fixed Value を設定します。
アクティビティをアクティブにするには、Preview で作成したボタンをクリックします。
次または前のアクティビティをアクティブ化する¶
次または前の Activity をアクティブにするには:
Controller Property で制御できるアクティベーション状態を持つ複数の Activities を持つ Exclusive Activity Host を作成します。
トリガーを持つノードを作成し、それを使用して Activity をアクティブにします。
例えば、Button ノードを作成し、Button: Click トリガーを使用します。
Node Tree で、前のステップで作成したノードを選択します。Node Components > Triggers で、アクティブにしたい Activity をトリガーする Alt を押しながら右クリック を選択し、Navigate To Next Activity または Navigate To Previous Activity アクションを選択し、アクションセットで:
Activities をアクティブにしたい Exclusive Activity Host を含む Target Item へ。
(オプション) トリガーを起動したときに、その Exclusive Activity Host の最後または最初の Activity に到達した後、最初または最後の Activity をアクティブにするには、Loop Activity プロパティを有効に設定します。
アクティビティをアクティブにするには、Preview で作成したボタンをクリックします。
アクティビティをアプライアクティベーションアクションでアクティベートする¶
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 を使用してアクティビティをアクティブ化するには:
Activity Browser で、Activities を持つ Exclusive Activity Host を作成します。
例えば、ヘッドライトモードを表示する Activities を持つ Exclusive Activity Host ノードを作成します。
Automatic
サイドパネルで、InitiallyActive プロパティを有効にします。
この方法で、Automatic アクティビティをデフォルトでアクティブに設定します。
High
Prefabs に、アクティビティが表示するコンテンツを追加します。
たとえば、各ヘッドライトモードに画像を追加します。
(オプション) Properties で、Exclusive Activity Host のサイズとアクティビティホスト内のアクティビティの位置を設定します。
最初のステップで作成したアクティビティの1つのアクティベーション状態を制御したいノードを作成します。
例えば、Asset Packages から、Checkbox を Node Tree の Exclusive Activity Host ノードにドラッグします。Properties で、Checkbox をアクティビティホストに配置します。
Apply Activation Action を持つ Data Trigger を作成します。
Node Tree で、Exclusive Activity Host ノードを選択します。Node Components で、Alt を押しながら右クリック Triggers を行い、Data Trigger を選択します。
Expression の Data Trigger で、
をクリックします。Node Tree で、Checkbox を選択します。Properties から、Toggle State プロパティを Expression フィールドにドラッグし、式を編集します。{@Checkbox/ButtonConcept.ToggleState}==1この条件式は、
TrueまたはFalseのいずれかに評価されなければなりません。ソースとしては、プロパティまたはデータソースからのデータオブジェクトを使用できます。Save をクリックします。
この方法で、Checkbox がチェックされたときに Data Trigger を Apply Activation Action を実行するように設定します。
Data Trigger で、Alt を押しながら右クリック Actions を選択し、Apply Activation Action を選択します。
Apply Activation Action で、設定します:
Activity Host Path から . へ
Activity Activation Path から High へ
Activity Activation Path プロパティで設定したアクティビティへのパスは、Activity Host Path プロパティで設定したエクスクルーシブアクティビティホストノードに対して相対的です。
Activity Browser は、Exclusive Activity Host が
アイコンを持つ Data Trigger を持っていることを示します。
ヒント
Activity への完全なアクティベーションパスを取得するには、Activity Browser で Activity を右クリックし、Copy Activation Path を選択します。このコマンドは、最上位の Activity Host からその Activity までの全パスをコピーします。
Activity Activation Path は Activities と Activity Hosts のみを含みます。
Preview で、チェックボックスを切り替えます。
チェックボックスがオンになっている場合、Checkbox の Toggle State プロパティの値は 1 であり、Data Trigger は Apply Activation Action で設定したアクティビティをアクティブにします。
Apply Activation Action は、このアクションを含む Data Trigger で条件が満たされている限り、アクティビティをアクティブに保ちます。
チェックボックスがオンになっていない場合、Checkbox の Toggle State プロパティの値は 0 であり、Data Trigger は Apply Activation Action で設定したアクティビティを非アクティブにします。
トリガー条件が満たされなくなると、Kanzi はアクティビティの状態をアクションが適用される前の状態にロールバックします。
ヒント
アプリケーション開発中に、Activity Browser サイドパネルでこれらの Data Trigger ツールを使用します。
ツール |
ディスクリプション (Description) |
|---|---|
Data Trigger がどこにあるか、そしてその Data Trigger のソースとターゲットのアクティビティがどこにあるかを示します。 |
|
Data Trigger を適用したときの状態をシミュレートします。 これにより、アプリケーション内のプロパティ値を変更することなく、データトリガーの条件が満たされたときにアプリケーションの状態を確認することができます。 |
|
選択された Data Trigger を Node Components ウィンドウに表示します。 |
APIでアクティビティを使用する¶
詳細については、Activity2D、Activity3D、ExclusiveActivityHost2D、および ExclusiveActivityHost3D クラスを参照してください。