יצירת מחלקות DeepLinkMatcher מותאמות אישית

אם ההתאמות שסופקו לא מספיקות לתרחישי השימוש שלכם, אתם יכולים ליצור התאמות משלכם על ידי הרחבת המחלקה DeepLinkMatcher.

כשמרחיבים את DeepLinkMatcher<T, R>, צריך לציין שני ארגומנטים של סוג: סוג מפתח הניווט של היעד (T : Any) וסוג תוצאת ההתאמה (R : DeepLinkMatcher.MatchResult<T>). אם לא צריך דירוג תוצאות בהתאמה אישית או מטא-נתונים נוספים, משתמשים ב-DeepLinkMatcher.MatchResult<T> בתור הארגומנט השני של הסוג.

לדוגמה, הנה הטמעה בסיסית של TelDeepLinkMatcher שתומך במזהי URI מסוג tel (כמו tel:5550100). מכיוון שמזהי URI מסוג tel הם אטומים, UriDeepLinkMatcher לא תומך בהם:

דירוג של MatchResult סוגים בהתאמה אישית

אם יש דרך משמעותית להשוות בין תוצאות ההתאמה מההתאמה האישית, צריך להרחיב את DeepLinkMatcher.MatchResult ולבטל את השיטה compareTo כדי לדרג את התוצאות.

כשיוצרים מחלקת משנה מותאמת אישית של MatchResult, צריך לעדכן את הצהרת המחלקה של ההתאמה כדי לציין את מחלקת המשנה הזו כפרמטר הסוג השני שלה R (למשל class TelDeepLinkMatcher : DeepLinkMatcher<DialerKey, TelMatchResult>()). כך המתקשרים יכולים לגשת למאפייני התוצאות בהתאמה אישית בלי המרה לא מסומנת.

לדוגמה, כדי לתמוך בהתאמה של דפוסים עם תווים כלליים לחיפוש ב-TelDeepLinkMatcher, אפשר להטמיע TelMatchResult כדי לוודא שהתאמות מדויקות ידורגו גבוה יותר מהתאמות עם תווים כלליים לחיפוש. אם ההתאמה מוקפת ב-withBackStack, צריך להסיר את WrappedMatchResult לפני ההשוואה כדי שהקדימות תיבדק מול תוצאת ההתאמה הבסיסית: