ایجاد کلاس‌های سفارشی 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 را باز کنید تا اولویت نسبت به نتیجه مطابقت زیرین ارزیابی شود: