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

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

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

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

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

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

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

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