创建自定义 DeepLinkMatcher 类

如果提供的匹配器无法满足您的使用情形,您可以 扩展 DeepLinkMatcher 类来创建自己的匹配器。

扩展 DeepLinkMatcher<T, R> 时,您必须指定两个类型实参: 目标导航键类型 (T : Any) 和匹配结果类型 (R : DeepLinkMatcher.MatchResult<T>)。如果您的匹配器不需要自定义 结果排名或额外的元数据,请使用 DeepLinkMatcher.MatchResult<T> 作为 第二个类型实参。

例如,以下是支持 tel URI(例如 tel:5550100)的 TelDeepLinkMatcher 的基本实现。由于 tel URI 是不透明的,因此 UriDeepLinkMatcher 不支持它们:

对自定义 MatchResult 类进行排名

如果有一种有意义的方式来比较自定义匹配器的匹配结果, 您应该扩展 DeepLinkMatcher.MatchResult 并替换 compareTo 方法来对结果进行排名。

创建自定义 MatchResult 子类时,请更新匹配器的类 声明,以将该子类指定为其第二个类型形参 R(例如 class TelDeepLinkMatcher : DeepLinkMatcher<DialerKey, TelMatchResult>())。 这样,调用方就可以访问您的自定义结果属性,而无需进行未经检查的 向下转换。

例如,为了在 TelDeepLinkMatcher 中支持通配符模式匹配,您可以实现 TelMatchResult,以确保完全匹配的排名高于通配符匹配。如果匹配器封装在 withBackStack 中,请先解封装 WrappedMatchResult,然后再进行比较,以便根据底层匹配结果评估优先级 :