カスタム DeepLinkMatcher クラスを作成する

提供されているマッチャーがユースケースに十分でない場合は、 DeepLinkMatcherクラスを拡張して独自のマッチャーを作成できます。

DeepLinkMatcher<T, R> を拡張する場合は、宛先ナビゲーション キーのタイプ(T : Any)と一致結果のタイプ(R : DeepLinkMatcher.MatchResult<T>)の 2 つのタイプ引数を指定する必要があります。マッチャーでカスタム結果のランキングや追加のメタデータが必要ない場合は、2 番目のタイプ引数として DeepLinkMatcher.MatchResult<T> を使用します。

たとえば、TelDeepLinkMatcher の基本的な実装は次のようになります。tel URI(tel:5550100 など)をサポートします。tel URI は不透明であるため、UriDeepLinkMatcher ではサポートされていません。

カスタム MatchResult クラスをランク付けする

カスタム マッチャーの一致結果を比較する意味のある方法がある場合は、 DeepLinkMatcher.MatchResult を拡張し、 compareTo メソッドをオーバーライドして結果をランク付けする必要があります。

カスタム MatchResult サブクラスを作成する場合は、マッチャーのクラス 宣言を更新して、そのサブクラスを 2 番目のタイプ パラメータ R として指定します( class TelDeepLinkMatcher : DeepLinkMatcher<DialerKey, TelMatchResult>() など)。 これにより、呼び出し元は、チェックされていない ダウンキャストなしでカスタム結果のプロパティにアクセスできます。

たとえば、TelDeepLinkMatcher でワイルドカード パターン マッチングをサポートするには、TelMatchResult を実装して、完全一致がワイルドカード一致よりも上位にランク付けされるようにします。マッチャーが withBackStack でラップされている場合は、比較する前に WrappedMatchResult のラップを解除して、優先度が 基盤となる一致結果に対して評価されるようにします。