يعمل Android SearchSuggestSelection على تمكين الاستعلام الذي يبدأ بـ بدلاً من أن يحتوي على بحث

StackOverflow https://stackoverflow.com//questions/11649194

  •  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.

ونظرًا لأن التنفيذ يتجاهل المعلمات الواردة، فلا يوجد حل أو تجاوز سهل.لإنقاذ نفسك من الترميز المكرر، أود أن:

  1. انسخ التنفيذ الكامل لـ SearchRecentSuggestionsProvider من الرابط أعلاه.لا ينبغي لأي شيء يفعله الفصل أن يكون إطارًا خاصًا، لذا يجب تجميع نسخة مباشرة.
  2. قم بتعديل بيان البناء من مصفوفة args داخل ملف query() الطريقة، أن تكون String like = selectionArgs[0] + "%" بدلاً من String like = "%" + selectionArgs[0] + "%" (أي.إزالة النسبة المئوية الأولى)
  3. فئة فرعية ProductSearchSuggestionProvider من التنفيذ الجديد الخاص بك بدلا من ذلك.

نصائح أخرى

هل حاولت تسلسل السلسلة؟

word LIKE ? || '%'

|| هو تسلسل السلسلة في SQLite.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top