Membuat class DeepLinkMatcher kustom

Jika pencocok yang disediakan tidak cukup untuk kasus penggunaan Anda, Anda dapat membuat pencocok sendiri dengan memperluas class DeepLinkMatcher.

Saat memperluas DeepLinkMatcher<T, R>, Anda harus menentukan dua argumen jenis: jenis kunci navigasi tujuan (T : Any) dan jenis hasil pencocokan (R : DeepLinkMatcher.MatchResult<T>). Jika pencocok Anda tidak memerlukan peringkat hasil kustom atau metadata tambahan, gunakan DeepLinkMatcher.MatchResult<T> sebagai argumen jenis kedua.

Misalnya, berikut adalah implementasi dasar TelDeepLinkMatcher yang mendukung URI tel (seperti tel:5550100). Karena URI tel bersifat buram, UriDeepLinkMatcher tidak mendukungnya:

Memberi peringkat pada MatchResult class kustom

Jika ada cara yang bermakna untuk membandingkan hasil pencocokan dari pencocok kustom, Anda harus memperluas DeepLinkMatcher.MatchResult dan mengganti metode compareTo untuk memberi peringkat hasil.

Saat Anda membuat subclass MatchResult kustom, perbarui deklarasi class matcher Anda untuk menentukan subclass tersebut sebagai parameter jenis kedua R (seperti class TelDeepLinkMatcher : DeepLinkMatcher<DialerKey, TelMatchResult>()). Hal ini memungkinkan pemanggil mengakses properti hasil kustom Anda tanpa downcasting yang tidak dicentang.

Misalnya, untuk mendukung pencocokan pola karakter pengganti di TelDeepLinkMatcher, Anda dapat menerapkan TelMatchResult untuk memastikan pencocokan persis memiliki peringkat lebih tinggi daripada pencocokan karakter pengganti. Jika matcher digabungkan dalam withBackStack, buka gabungan WrappedMatchResult sebelum membandingkan agar prioritas dievaluasi terhadap hasil pencocokan yang mendasarinya: