Tworzenie niestandardowych klas DeepLinkMatcher

Jeśli podane dopasowania nie są wystarczające w Twoich przypadkach użycia, możesz utworzyć własne, rozszerzając klasę DeepLinkMatcher.

Rozszerzając DeepLinkMatcher<T, R>, musisz określić 2 argumenty typu: typ klucza nawigacji do miejsca docelowego (T : Any) i typ wyniku dopasowania (R : DeepLinkMatcher.MatchResult<T>). Jeśli dopasowanie nie wymaga niestandardowego rankingu wyników ani dodatkowych metadanych, użyj DeepLinkMatcher.MatchResult<T> jako drugiego argumentu typu.

Oto na przykład podstawowa implementacja TelDeepLinkMatcher, która obsługuje identyfikatory URI tel (np. tel:5550100). Ponieważ identyfikatory URI tel są nieprzezroczyste, UriDeepLinkMatcher ich nie obsługuje:

Ranking niestandardowych klas MatchResult

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

Gdy utworzysz 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 osoby wywołujące mogą uzyskiwać dostęp do niestandardowych właściwości wyniku bez sprawdzania rzutowania w dół.

Aby na przykład obsługiwać dopasowywanie wzorców z symbolami wieloznacznymi w TelDeepLinkMatcher, możesz zaimplementować TelMatchResult, aby zapewnić, że dokładne dopasowania będą miały wyższy ranking niż dopasowania z symbolami wieloznacznymi. Jeśli dopasowanie jest opakowane w withBackStack, rozpakuj WrappedMatchResult przed porównaniem, aby pierwszeństwo było oceniane na podstawie bazowego wyniku dopasowania: