エクスクルーシブアクティビティホスト¶
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:
プレハブを使用してアクティビティノードを作成します。
アクティビティノードをノードツリーにアタッチします。
アクティビティを表示します。
アクティビティホストがキーのフォーカスを持ち、異なる設定がされていない場合、キーのフォーカスをアクティビティに設定します。アクティビティをアクティブ化する際にフォーカスを設定するかどうかを制御する。
排他的アクティビティホストでの仮想化の制御¶
デフォルトで、アクティビティを非アクティブ化すると、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:
プレハブを使用してアクティビティノードを作成します。
アクティビティノードをノードツリーにアタッチします。
アクティビティを表示します。
アクティビティホストがキーのフォーカスを持ち、異なる設定がされていない場合、キーのフォーカスをアクティビティに設定します。アクティビティをアクティブ化する際にフォーカスを設定するかどうかを制御する。
デフォルトで、アクティビティを非アクティブ化すると、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 で作成したボタンをクリックします。
プロパティ設定アクションでアクティビティをアクティブ化する¶
アクティビティをアクティブにするために、アプリケーションのロジックがアクティビティをアクティブにするために 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 ウィンドウに表示します。 |
フォールバックステートの使用¶
Exclusive Activity Host は UI ステートマシンのように動作し、各 Activity が UI の状態を表します。Exclusive Activity Host 内のアクティビティを明示的に非アクティブにするには、Fallback State を使用します。Fallback State にはコンテンツを含めることができません。
たとえば、自動的に閉じるオーバーレイには Fallback State を使用します。Kanzi は、アクティビティの境界の外側で入力を検出すると、フォールバックステートを自動的にアクティブにします。フォーカス を参照してください。
フォールバックステートは次の方法でアクティブにできます。
Go To Fallback State メッセージ。Go To Fallback State メッセージでフォールバックステートをアクティブにする を参照してください。
フォーカススコープの自動クローズモーダル。自動クローズモーダルでフォールバックステートをアクティブにする を参照してください。
アクティビティをアクティブにするためのいずれかの方法。アクティビティのアクティベーション を参照してください。
アクティビティのアクティベーション を参照してください。
Go To Fallback State メッセージでフォールバックステートをアクティブにする¶
Go To Fallback State メッセージでフォールバックステートをアクティブにするには、
Activity Browser で、複数のアクティビティを持つ Exclusive Activity Host の下にある
をクリックし、Create Fallback State を選択します。
Fallback State に切り替えるために使用する UI 要素を作成します。
例:
Button ノードを作成します。
Node Components > Triggers で、フォールバックステートをアクティブにするために使用するトリガーを Alt を押しながら右クリック し、Dispatch Message Action > Exclusive Activity Host > Go To Fallback State メッセージを選択して、Target Item をターゲットの排他的アクティビティホストに設定します。
Preview でボタンをクリックすると、Exclusive Activity Host が Fallback State をアクティブにします。
自動クローズモーダルでフォールバックステートをアクティブにする¶
フォーカススコープの自動クローズモーダルでフォールバックステートをアクティブにするには、
Activity Browser で、1 つ以上のアクティビティを持つ Exclusive Activity Host の下にある
をクリックし、Create Fallback State を選択します。
Fallback State を除くすべてのアクティビティに Focus Scope > Focus Scope Type プロパティを追加し、それを Auto-Closing Modal に設定します。
Preview で、Focus Scope Type プロパティを追加したアクティビティがアクティブなときにそのアクティビティの外側をクリックすると、Exclusive Activity Host は Fallback State をアクティブにします。
APIでアクティビティを使用する¶
詳細については、Activity2D、Activity3D、ExclusiveActivityHost2D、および ExclusiveActivityHost3D クラスを参照してください。