يعمل Android SearchSuggestSelection على تمكين الاستعلام الذي يبدأ بـ بدلاً من أن يحتوي على بحث
-
11-12-2019 - |
سؤال
أنا أستخدم أندرويد SearchRecentSuggestionsProvider و تكوين قابل للبحث لعرض عمليات البحث السابقة في التطبيق وترغب في قصر الاستجابات المقترحة على إرجاع الإدخالات التي تبدأ بـ فقط؟(ما يكتبه المستخدم)
حاليًا، يقوم "p" بإرجاع الهاتف، وipod، والصورة، والسعادة، وما أبحث عنه هو مجرد هاتف وصورة
شيء مكافئ لـ SQL مثل % لكن يبدو أنني لا أستطيع تشغيل ذلك.
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
android:hint="@string/product_search_hint"
android:imeOptions="actionSearch"
android:label="@string/app_label"
android:searchSuggestAuthority="com.myapp.ProductSearchSuggestionProvider"
android:searchSuggestSelection="word MATCH ?" >
</searchable>
حاول:
android:searchSuggestSelection="WORD LIKE '%'?"
المحلول
إذا كنت تقوم بتنفيذ موفر اقتراحات مخصص بالكامل، فإن تطبيق التخصيصات على هذا المستوى سيعمل كما هو متوقع.ومع ذلك، ضمن الأغطية، يقوم SearchRecentSuggestionsProvider بالاستعلام عن الجدول المحلي الخاص به باستخدام الوسائط المشفرة التالية (الق نظرة):
- التحديد = "display1 مثل؟"
- SelectArgs = ["%{query}%"]
حيث {query} هو استعلام البحث (يتم وضعه بين علامتي النسبة المئوية بحيث يتم احتساب أي حرف يتطابق في أي مكان في السلسلة).إنه يتجاهل القيمة التي تم تمريرها لسلسلة التحديد (وهو ما تقوم بتعيينه باستخدام searchSuggestSelection
المعلمة) ومصفوفة args (بخلاف التحقق مما إذا كانت فارغة)، لذلك ليس هناك الكثير مما يمكنك فعله من خلال XML.
ونظرًا لأن التنفيذ يتجاهل المعلمات الواردة، فلا يوجد حل أو تجاوز سهل.لإنقاذ نفسك من الترميز المكرر، أود أن:
- انسخ التنفيذ الكامل لـ
SearchRecentSuggestionsProvider
من الرابط أعلاه.لا ينبغي لأي شيء يفعله الفصل أن يكون إطارًا خاصًا، لذا يجب تجميع نسخة مباشرة. - قم بتعديل بيان البناء من مصفوفة args داخل ملف
query()
الطريقة، أن تكونString like = selectionArgs[0] + "%"
بدلاً منString like = "%" + selectionArgs[0] + "%"
(أي.إزالة النسبة المئوية الأولى) - فئة فرعية
ProductSearchSuggestionProvider
من التنفيذ الجديد الخاص بك بدلا من ذلك.
نصائح أخرى
هل حاولت تسلسل السلسلة؟
word LIKE ? || '%'
||
هو تسلسل السلسلة في SQLite.