仕事でタブページをあれこれしていた時のことです。

 

タブページに別定義のページ(以降子タブ)を埋め込んだ際に、

  1. 子タブのコンストラクタ
  2. タブページのコンストラクタ

の順に処理が行われます。

 

子タブページの描画が、タブページ生成時点で完了するんですが、

子タブへの遷移で再描画(一部初期化)されてしまうケースがありました。

 

また、子タブへの遷移時にある処理を行いたいという要望もあったため、

タブ選択(遷移)時のイベントを検知することにしました。

 

調べたところ、PrismにIActiveAwareという便利なインターフェースが用意されていました。

TabbedPageの基本あれこれ

NavigationPageとの併用

各所でご紹介されていると思うので、コードのみ載せておきます。

TabbedPageからの遷移方法

※NavigationPageとして定義した場合の遷移方法です。

タブページごと遷移する場合にはルートからのModal再生成が必要になります。

 

その為、タブページの表示にかかる処理を遷移の際にもう一度走らせなければなりません。

※この辺もっといい方法があったら教えて頂きたいです…。

タブ選択時のイベント検知(IActiveAwareの実装)

子タブページにIActiveAwareを実装するだけで出来ます。

【情報求ム】IActiveAware実装における落とし穴(?)

バグなのか、私の実装がおかしいのか、MasterDetailPageのDetailでタブページを定義した際

IsActiveの変更通知を受け取ることが出来ません。

※原因(MasterDetailPage)すら特定できず、会社では丸一日悩んでました。

回避方法としてはMasterDetailPageのDetail部分にダミーページを定義し、

ダミーページからタブページへと遷移した際にはIsActiveの変更通知を受け取ることが出来ました。

 

ただこの実装方法では無駄なクラスが増えてしまうため、得策とは言えません。

私の実装に誤り等ある場合、指摘いただけたら幸いです。

 

※とりあえず、仕事ではダミーページ使います。

 

次回はタブ選択検知を必要になった理由である

『GoogleMaps』あたりをご紹介しようと思います。