ایجاد کلاس‌های سفارشی DeepLinkMatcher

اگر مطابقت‌دهنده‌های ارائه‌شده برای موارد استفاده شما کافی نیستند، می‌توانید با گسترش کلاس DeepLinkMatcher، مطابقت‌دهنده‌های خودتان را ایجاد کنید.

هنگام گسترش DeepLinkMatcher<T, R>، باید دو آرگومان نوع را مشخص کنید: نوع کلید پیمایش مقصد (T : Any) و نوع نتیجه مطابقت (R : DeepLinkMatcher.MatchResult<T>). اگر مطابقت‌دهنده شما به رتبه‌بندی نتیجه سفارشی یا فراداده اضافی نیاز ندارد، از DeepLinkMatcher.MatchResult<T> به‌عنوان آرگومان نوع دوم استفاده کنید.

برای مثال، در اینجا پیاده‌سازی پایه‌ای از TelDeepLinkMatcher ارائه شده است که از نشانی‌های وب tel (مثل tel:5550100) پشتیبانی می‌کند. ازآنجایی‌که نشانی‌های وب tel مبهم هستند، UriDeepLinkMatcher از آن‌ها پشتیبانی نمی‌کند:

رتبه‌بندی MatchResult کلاس سفارشی

اگر روش معناداری برای مقایسه نتایج مطابقت از مطابقت‌دهنده سفارشی‌تان وجود دارد، باید DeepLinkMatcher.MatchResult را گسترش دهید و روش compareTo را برای رتبه‌بندی نتایج ملغی کنید.

وقتی زیرکلاس سفارشی MatchResult ایجاد می‌کنید، اعلان کلاس مطابقت‌دهنده را به‌روز کنید تا آن زیرکلاس را به‌عنوان پارامتر نوع دوم آن R مشخص کنید (مثلاً class TelDeepLinkMatcher : DeepLinkMatcher<DialerKey, TelMatchResult>()). این کار به تماس‌گیرندگان امکان می‌دهد بدون بررسی تبدیل به نوع پایین‌تر به دارایی‌های نتیجه سفارشی شما دسترسی داشته باشند.

برای مثال، برای پشتیبانی از تطبیق الگوی نویسه عام در TelDeepLinkMatcher، می‌توانید TelMatchResult را پیاده‌سازی کنید تا مطمئن شوید تطابق‌های دقیق رتبه بالاتری نسبت به تطابق‌های نویسه عام داشته باشند. اگر تطبیق‌دهنده در withBackStack پیچیده شده است، قبل‌از مقایسه، آن را باز کنید WrappedMatchResult تا اولویت دربرابر نتیجه مطابقت زیرین ارزیابی شود: