Tworzenie niestandardowych klas DeepLinkMatcher

Jeśli dostępne dopasowania nie są wystarczające w Twoim przypadku, możesz utworzyć własne, rozszerzając klasę DeepLinkMatcher.

Podczas rozszerzania klasy DeepLinkMatcher<T, R> musisz podać 2 argumenty typu: typ klucza nawigacji docelowej (T : Any) i typ wyniku dopasowania (R : DeepLinkMatcher.MatchResult<T>). Jeśli Twój dopasowujący nie potrzebuje niestandardowego rankingu wyników ani dodatkowych metadanych, jako drugi argument typu użyj DeepLinkMatcher.MatchResult<T>.

Oto przykładowa podstawowa implementacja TelDeepLinkMatcher, która obsługuje identyfikatory URI tel (takie jak tel:5550100). Identyfikatory URI tel są nieprzezroczyste, więc UriDeepLinkMatcher ich nie obsługuje:

Klasyfikowanie niestandardowych klas (MatchResult)

Jeśli istnieje sensowny sposób porównywania wyników dopasowania z niestandardowego dopasowania, rozszerz klasę DeepLinkMatcher.MatchResult i zastąp metodę compareTo, aby oceniać wyniki.

Gdy tworzysz niestandardową podklasę MatchResult, zaktualizuj deklarację klasy dopasowania, aby określić tę podklasę jako drugi parametr typu R (np. class TelDeepLinkMatcher : DeepLinkMatcher<DialerKey, TelMatchResult>()). Dzięki temu wywołujący będą mogli uzyskać dostęp do niestandardowych właściwości wyników bez niesprawdzonego rzutowania w dół.

Na przykład, aby obsługiwać dopasowywanie wzorców z symbolami wieloznacznymi w TelDeepLinkMatcher, możesz wdrożyć TelMatchResult, aby dopasowania ścisłe miały wyższą pozycję niż dopasowania z symbolami wieloznacznymi. Jeśli dopasowanie jest ujęte w withBackStack, przed porównaniem usuń WrappedMatchResult, aby pierwszeństwo było oceniane na podstawie wyniku dopasowania: