কাস্টম সার্চ সাজেশন যোগ করুন

Compose-এর মাধ্যমে চেষ্টা করুন
Jetpack Compose হল Android-এর জন্য সাজেস্ট করা UI টুলকিট। Compose-এ কীভাবে সার্চ ফাংশনালিটি যোগ করতে হয় তা জানুন।

Android সার্চ ডায়ালগ বা সার্চ উইজেট ব্যবহার করার সময়, আপনি কাস্টম সার্চ সাজেশন দিতে পারেন যা আপনার অ্যাপের ডেটা থেকে তৈরি করা হয়। যেমন, আপনার অ্যাপ যদি কোনও ডিকশনারি হয়, তাহলে ব্যবহারকারী তার কোয়েরি লেখা শেষ করার আগে সার্চ ফিল্ডে লেখা টেক্সটের সাথে ম্যাচ করে এমন শব্দ ডিকশনারি থেকে সাজেস্ট করতে পারেন। এইসব সাজেশন মূল্যবান কারণ এগুলি ব্যবহারকারী কী চান তা কার্যকরভাবে অনুমান করতে পারে এবং এটিতে তাৎক্ষণিক অ্যাক্সেস প্রদান করে। ছবি ১-এ কাস্টম সাজেশন সহ সার্চ ডায়ালগের উদাহরণ দেখানো হয়েছে।

কাস্টম সাজেশন প্রদান করার পরে, আপনি সেগুলি সিস্টেম-ব্যাপী দ্রুত সার্চ বক্সেও উপলভ্য করতে পারেন, যা আপনার অ্যাপের বাইরে থেকে আপনার কন্টেন্টে অ্যাক্সেস প্রদান করে।

কাস্টম সাজেশন যোগ করার আগে, আপনার অ্যাপে সার্চ করার জন্য Android সার্চ ডায়ালগ বা সার্চ উইজেট প্রয়োগ করুন। সার্চ ইন্টারফেস তৈরি করুন এবং কন্টেন্ট প্রোভাইডার দেখুন।

প্রাথমিক বিষয়

ছবি ১. কাস্টম সার্চ সাজেশন সহ সার্চ ডায়ালগের স্ক্রিনশট।

ব্যবহারকারী কাস্টম সাজেশন বেছে নিলে, সিস্টেম আপনার সার্চ করা যায় এমন অ্যাক্টিভিটিতে Intent পাঠায়। সাধারণ সার্চ কোয়েরির মতো নয় যা ACTION_SEARCH অ্যাকশনের সাথে ইনটেন্ট পাঠায়, আপনি এর পরিবর্তে ব্যবহার করার জন্য কাস্টম সাজেশন নির্দিষ্ট করতে পারেন ACTION_VIEW—অথবা অন্য কোনও ইনটেন্ট অ্যাকশন—এবং বেছে নেওয়া সাজেশনের সাথে প্রাসঙ্গিক ডেটাও অন্তর্ভুক্ত করতে পারেন। অভিধানের উদাহরণে, ব্যবহারকারী কোনও সাজেশন বেছে নিলে, অ্যাপটি অভিধানে মিল খোঁজার পরিবর্তে অবিলম্বে সেই শব্দের সংজ্ঞা খুলতে পারে।

কাস্টম সাজেশন দিতে, নিম্নলিখিত ধাপগুলি অনুসরণ করুন:

  • সার্চ ইন্টারফেস তৈরি করুন-এ যেমন বর্ণনা করা হয়েছে, সেই অনুযায়ী একটি প্রাথমিক সার্চযোগ্য অ্যাক্টিভিটি প্রয়োগ করুন।
  • কাস্টম সাজেশন প্রদানকারী কন্টেন্ট প্রোভাইডার সম্পর্কে তথ্য সহ সার্চযোগ্য কনফিগারেশন পরিবর্তন করুন।
  • আপনার সাজেশনের জন্য একটি টেবিল তৈরি করুন, যেমন SQLiteDatabase-এ এবং প্রয়োজনীয় কলাম সহ টেবিলটি ফর্ম্যাট করুন।
  • একটি কন্টেন্ট প্রোভাইডার তৈরি করুন যার আপনার সাজেশন টেবিল অ্যাক্সেস করার অনুমতি আছে এবং আপনার ম্যানিফেস্টে প্রোভাইডার ঘোষণা করুন।
  • ব্যবহারকারী কোনও সাজেশন বেছে নিলে, কাস্টম অ্যাকশন ও কাস্টম ডেটা সহ, যে ধরনের Intent পাঠানো হবে তা ঘোষণা করুন।

Android সিস্টেম যেভাবে সার্চ ডায়ালগ দেখায়, ঠিক সেইভাবে আপনার সার্চ সাজেশনও দেখায়। আপনার একটি কন্টেন্ট প্রোভাইডার প্রয়োজন যেখান থেকে সিস্টেম আপনার সাজেশন উদ্ধার করতে পারে। কীভাবে কন্টেন্ট প্রোভাইডার তৈরি করতে হয় তা জানতে কন্টেন্ট প্রোভাইডার পড়ুন।

সিস্টেম যখন শনাক্ত করে যে আপনার অ্যাক্টিভিটি সার্চ করা যাবে এবং সার্চ সাজেশন প্রদান করে, তখন ব্যবহারকারী কোনও কোয়েরি লিখলে নিম্নলিখিত পদ্ধতিটি অনুসরণ করা হয়:

  1. সিস্টেম সার্চ কোয়েরি টেক্সট নেয়—অর্থাৎ, এখনও পর্যন্ত যা লেখা হয়েছে—এবং আপনার কন্টেন্ট প্রোভাইডারের কাছে কোয়েরি করে যা আপনার সাজেশন ম্যানেজ করে।
  2. আপনার কন্টেন্ট প্রোভাইডার একটি Cursor ফেরত পাঠায় যা সার্চ কোয়েরি টেক্সটের সাথে প্রাসঙ্গিক সব সাজেশন দেখায়।
  3. Cursor-এর দেওয়া সাজেশনের তালিকা সিস্টেম দেখায়।

কাস্টম সাজেশন দেখানো হলে, নিম্নলিখিত ঘটনা ঘটতে পারে:

  • ব্যবহারকারী অন্য কোনও অক্ষর লিখলে বা কোনওভাবে কোয়েরি পরিবর্তন করলে, আগের ধাপগুলি আবার করা হয় এবং সেই অনুযায়ী সাজেশনের তালিকা আপডেট করা হয়।
  • ব্যবহারকারী সার্চ করলে, সাজেশন উপেক্ষা করা হয় এবং সার্চ করা যায় এমন অ্যাক্টিভিটিতে সার্চের ফলাফল দেখানো হয়, এর জন্য সাধারণ ACTION_SEARCH ইনটেন্ট ব্যবহার করা হয়।
  • ব্যবহারকারী কোনও সাজেশন বেছে নিলে, আপনার সার্চযোগ্য অ্যাক্টিভিটিতে একটি ইনটেন্ট পাঠানো হয়, এতে কাস্টম অ্যাকশন ও কাস্টম ডেটা থাকে যাতে আপনার অ্যাপ সাজেস্ট করা কন্টেন্ট খুলতে পারে।

সার্চ করা যায় এমন কনফিগারেশন পরিবর্তন করুন

কাস্টম সাজেশনের জন্য সহায়তা যোগ করতে, আপনার সার্চযোগ্য কনফিগারেশন ফাইলের <searchable> এলিমেন্টে android:searchSuggestAuthority অ্যাট্রিবিউট যোগ করুন, যেমনটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে:

<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
    android:label="@string/app_label"
    android:hint="@string/search_hint"
    android:searchSuggestAuthority="com.example.MyCustomSuggestionProvider">
</searchable>

আপনি প্রতিটি সাজেশনে যে ধরনের ইনটেন্ট অ্যাটাচ করেন এবং আপনার কন্টেন্ট প্রোভাইডারের কাছে কোয়েরি যেভাবে ফর্ম্যাট করতে চান, তার উপর নির্ভর করে আপনার অতিরিক্ত অ্যাট্রিবিউটের প্রয়োজন হতে পারে। অন্যান্য ঐচ্ছিক অ্যাট্রিবিউট সম্পর্কে নিম্নলিখিত বিভাগে আলোচনা করা হয়েছে।

কন্টেন্ট প্রোভাইডার তৈরি করা

কাস্টম সাজেশন দেখানোর জন্য কন্টেন্ট প্রোভাইডার তৈরি করতে, প্রথমে কন্টেন্ট প্রোভাইডার লিঙ্কে গিয়ে কন্টেন্ট প্রোভাইডার কীভাবে তৈরি করতে হয় তা জানুন। কাস্টম সাজেশন দেখানোর জন্য কন্টেন্ট প্রোভাইডার অন্য যেকোনও কন্টেন্ট প্রোভাইডারের মতোই। তবে, আপনার দেওয়া প্রতিটি সাজেশনের জন্য, Cursor-এর সংশ্লিষ্ট সারিতে নির্দিষ্ট কলাম থাকতে হবে যা সিস্টেম বুঝতে পারে এবং সাজেশন ফর্ম্যাট করার জন্য ব্যবহার করে।

ব্যবহারকারী সার্চ ডায়ালগ বা সার্চ উইজেটে টেক্সট লিখলে, সিস্টেম সাজেশনের জন্য আপনার কন্টেন্ট প্রোভাইডারকে কোয়েরি করে, query() প্রতিবার একটি করে অক্ষর লেখার সময় কল করে। query()-এর প্রয়োগে, আপনার কন্টেন্ট প্রোভাইডারকে অবশ্যই আপনার সাজেশন ডেটা সার্চ করতে হবে এবং একটি Cursor রিটার্ন করতে হবে যা এটি নির্ধারণ করে এমন সারিগুলির দিকে নির্দেশ করে যেগুলি ভাল সাজেশন।

কাস্টম সাজেশনের জন্য কন্টেন্ট প্রোভাইডার তৈরি করার ব্যাপারে বিস্তারিত তথ্য নিচের দুটি বিভাগে আলোচনা করা হয়েছে:

সাজেশন কোয়েরি ম্যানেজ করা
সিস্টেম কীভাবে আপনার কন্টেন্ট প্রোভাইডারকে অনুরোধ পাঠায় এবং কীভাবে সেগুলি ম্যানেজ করতে হয়।
সাজেশন টেবিল তৈরি করা
প্রতিটি কোয়েরির সাথে ফেরত আসা Cursor-এ সিস্টেম যে কলামগুলি আশা করে সেগুলি কীভাবে সংজ্ঞায়িত করবেন।

সাজেশন কোয়েরি ম্যানেজ করুন

সিস্টেম যখন আপনার কন্টেন্ট প্রোভাইডারের থেকে সাজেশন চায়, তখন এটি আপনার কন্টেন্ট প্রোভাইডারের query() মেথডকে কল করে। আপনার সাজেশন ডেটা সার্চ করতে এবং আপনার প্রাসঙ্গিক মনে হওয়া সাজেশনের দিকে ইঙ্গিত করে এমন একটি Cursor ফিরিয়ে দিতে এই পদ্ধতি প্রয়োগ করুন।

এখানে সিস্টেম আপনার query() পদ্ধতিতে যে প্যারামিটারগুলি পাস করে তার একটি সারসংক্ষেপ রয়েছে, যা ক্রমানুসারে তালিকাভুক্ত করা হয়েছে:

  1. uri

    সবসময় কন্টেন্ট Uri, এইভাবে ফর্ম্যাট করা হয়:

    content://your.authority/optional.suggest.path/SUGGEST_URI_PATH_QUERY
    

    ডিফল্ট অ্যাকশন হল সিস্টেমের জন্য এই URI পাস করা এবং এতে কোয়েরি টেক্সট যোগ করা:

    content://your.authority/optional.suggest.path/SUGGEST_URI_PATH_QUERY/puppies
    

    কোয়েরি টেক্সটের শেষ অংশ URI এনকোডিং নিয়ম অনুযায়ী এনকোড করা থাকে, তাই সার্চ করার আগে আপনাকে এটি ডিকোড করতে হতে পারে।

    android:searchSuggestPath অ্যাট্রিবিউট সহ আপনার সার্চ করা যায় এমন কনফিগারেশন ফাইলে এই ধরনের পাথ সেট করলে, তবেই optional.suggest.path অংশটি URI-তে অন্তর্ভুক্ত করা হয়। এটি তখনই প্রয়োজন হয় যখন আপনি একাধিক সার্চযোগ্য অ্যাক্টিভিটির জন্য একই কন্টেন্ট প্রোভাইডার ব্যবহার করেন। যদি এইরকম হয়, তাহলে সাজেশন কোয়েরির সোর্স থেকে অস্পষ্টতা দূর করুন।

  2. projection
    সবসময় নাল।
  3. selection
    আপনার সার্চ করা যায় এমন কনফিগারেশন ফাইলের android:searchSuggestSelection অ্যাট্রিবিউটে দেওয়া ভ্যালু অথবা আপনি android:searchSuggestSelection অ্যাট্রিবিউট ঘোষণা না করলে, নাল। নিম্নলিখিত বিভাগে এই বিষয়ে আরও আলোচনা করা হয়েছে।
  4. selectionArgs
    সার্চ করা যায় এমন কনফিগারেশনে android:searchSuggestSelection অ্যাট্রিবিউট ঘোষণা করলে, অ্যারের প্রথম এবং একমাত্র এলিমেন্ট হিসেবে সার্চ কোয়েরি থাকে। আপনি যদি android:searchSuggestSelection ঘোষণা না করেন, তাহলে এই প্যারামিটারটি নাল হবে। নিম্নলিখিত বিভাগে এই বিষয়ে আরও আলোচনা করা হয়েছে।
  5. sortOrder
    সবসময় নাল।

সিস্টেম আপনাকে দুইভাবে সার্চ কোয়েরি টেক্সট পাঠাতে পারে। ডিফল্ট পদ্ধতি হল কোয়েরি টেক্সটকে কন্টেন্ট URI-এর শেষ পাথ হিসেবে অন্তর্ভুক্ত করা যা uri প্যারামিটারে পাস করা হয়। তবে, আপনি যদি আপনার সার্চযোগ্য কনফিগারেশনের android:searchSuggestSelection অ্যাট্রিবিউটে একটি সিলেকশন ভ্যালু অন্তর্ভুক্ত করেন, তাহলে কোয়েরি টেক্সটটি selectionArgs স্ট্রিং অ্যারের প্রথম এলিমেন্ট হিসেবে পাস হয়। এই দুটি বিকল্পের বিবরণ নিচে দেওয়া হল।

Uri-তে কোয়েরি পান

ডিফল্ট হিসেবে, কোয়েরি uri প্যারামিটারের শেষ সেগমেন্ট হিসেবে যোগ করা হয়—একটি Uri অবজেক্ট। এই ক্ষেত্রে কোয়েরি টেক্সট ফিরিয়ে আনতে, getLastPathSegment() ব্যবহার করুন, যেমন নিম্নলিখিত উদাহরণে দেখানো হয়েছে:

Kotlin

val query: String = uri.lastPathSegment.toLowerCase()

জাভা

String query = uri.getLastPathSegment().toLowerCase();

এটি Uri-এর শেষ অংশটি ফেরত দেয়, যা ব্যবহারকারীর লেখা কোয়েরি টেক্সট।

বাছাই করা আর্গুমেন্টে কোয়েরি পান

URI ব্যবহার করার পরিবর্তে, আপনার query() পদ্ধতির জন্য লুক-আপ করার জন্য প্রয়োজনীয় সবকিছু গ্রহণ করা আরও যুক্তিযুক্ত হতে পারে এবং আপনি হয়ত selection এবং selectionArgs প্যারামিটারগুলি উপযুক্ত ভ্যালু বহন করুক বলে চাইবেন। এই ক্ষেত্রে, আপনার SQLite সিলেকশন স্ট্রিংয়ের সাথে সার্চযোগ্য কনফিগারেশনে android:searchSuggestSelection অ্যাট্রিবিউট যোগ করুন। বাছাই করা স্ট্রিংয়ে, আসল সার্চ কোয়েরির জন্য প্লেসহোল্ডার হিসেবে প্রশ্নবোধক চিহ্ন (?) যোগ করুন। সিস্টেম query()-কে কল করে, যেখানে বেছে নেওয়া স্ট্রিং হল selection প্যারামিটার এবং সার্চ কোয়েরি হল selectionArgs অ্যারের প্রথম এলিমেন্ট।

যেমন, সম্পূর্ণ টেক্সট সার্চ স্টেটমেন্ট তৈরি করতে android:searchSuggestSelection অ্যাট্রিবিউট কীভাবে তৈরি করবেন তা এখানে দেখানো হল:

<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
    android:label="@string/app_label"
    android:hint="@string/search_hint"
    android:searchSuggestAuthority="com.example.MyCustomSuggestionProvider"
    android:searchSuggestIntentAction="android.intent.action.VIEW"
    android:searchSuggestSelection="word MATCH ?">
</searchable>

এই কনফিগারেশনের মাধ্যমে, আপনার query() পদ্ধতি selection প্যারামিটারকে "word MATCH ?" হিসেবে এবং selectionArgs প্যারামিটারকে সার্চ কোয়েরি হিসেবে ডেলিভার করে। আপনি যখন এগুলি SQLite query() পদ্ধতিতে, তাদের নিজ নিজ আর্গুমেন্ট হিসেবে পাস করেন, তখন সেগুলি একসাথে সিন্থেসাইজ করা হয়—অর্থাৎ, প্রশ্নচিহ্নটি কোয়েরি টেক্সট দিয়ে প্রতিস্থাপিত হয়। আপনি এইভাবে সাজেশন কোয়েরি পেলে এবং কোয়েরি টেক্সটে ওয়াইল্ডকার্ড যোগ করতে হলে, selectionArgs প্যারামিটারে সেগুলি যোগ করুন বা প্রিফিক্স হিসেবে ব্যবহার করুন, কারণ এই ভ্যালু কোটেশনের মধ্যে থাকে এবং প্রশ্নচিহ্নের জায়গায় যোগ করা হয়।

আগের উদাহরণের আরেকটি অ্যাট্রিবিউট হল android:searchSuggestIntentAction, যা ব্যবহারকারী কোনও সাজেশন বেছে নিলে প্রতিটি ইনটেন্টের সাথে পাঠানো ইনটেন্ট অ্যাকশনকে সংজ্ঞায়িত করে। এই বিষয়ে আরও আলোচনা করা হয়েছে সাজেশনের জন্য ইনটেন্ট ঘোষণা করুন বিভাগে।

সাজেশন টেবিল তৈরি করুন

আপনি যখন Cursor-এর মাধ্যমে সিস্টেমে সাজেশন ফেরত পাঠান, তখন সিস্টেম প্রতিটি সারিতে নির্দিষ্ট কলাম আশা করে। আপনি ডিভাইসের SQLite ডেটাবেস, ওয়েব সার্ভারের ডেটাবেস বা ডিভাইস বা ওয়েবের অন্য কোনও ফর্ম্যাটে সাজেশন ডেটা সেভ করুন না কেন, সাজেশনগুলি টেবিলের সারি হিসেবে ফর্ম্যাট করুন এবং Cursor-এর মাধ্যমে সেগুলি দেখান।

সিস্টেমটি বেশ কয়েকটি কলাম বোঝে, তবে এর মধ্যে মাত্র দুটি প্রয়োজন:

_ID
প্রতিটি সাজেশনের জন্য একটি অনন্য পূর্ণসংখ্যা সারি আইডি। সিস্টেমের এটি প্রয়োজন যাতে ListView-এ সাজেশন দেখানো যায়।
SUGGEST_COLUMN_TEXT_1
সাজেশন হিসেবে দেখানো স্ট্রিং।

নিম্নলিখিত কলামগুলি সব ঐচ্ছিক। অধিকাংশ বিষয় নিয়ে নিম্নলিখিত বিভাগে আরও আলোচনা করা হয়েছে।

SUGGEST_COLUMN_TEXT_2
একটি স্ট্রিং। আপনার Cursor-এ এই কলাম থাকলে, সব সাজেশন দুই-লাইনের ফর্ম্যাটে দেখানো হয়। এই কলামের স্ট্রিংটি প্রাথমিক সাজেশন টেক্সটের নিচে টেক্সটের দ্বিতীয়, ছোট লাইন হিসেবে দেখানো হয়। কোনও সেকেন্ডারি টেক্সট নেই তা বোঝাতে এটি নাল বা ফাঁকা হতে পারে।
SUGGEST_COLUMN_ICON_1
একটি ড্রয়েবল রিসোর্স, কন্টেন্ট বা ফাইল URI স্ট্রিং। আপনার Cursor-এ এই কলাম থাকলে, সব সাজেশন আইকন-প্লাস-টেক্সট ফর্ম্যাটে দেখানো হয় এবং বাঁদিকে ড্রয়েবল আইকন থাকে। এই সারিতে কোনও আইকন নেই তা বোঝাতে এটি নাল বা শূন্য হতে পারে।
SUGGEST_COLUMN_ICON_2
একটি ড্রয়েবল রিসোর্স, কন্টেন্ট বা ফাইল URI স্ট্রিং। আপনার Cursor-এ এই কলাম থাকলে, সব সাজেশন আইকন-প্লাস-টেক্সট ফর্ম্যাটে প্রদান করা হয়, যেখানে আইকনটি ডানদিকে থাকে। এই সারিতে কোনও আইকন নেই তা বোঝাতে এটি null বা শূন্য হতে পারে।
SUGGEST_COLUMN_INTENT_ACTION
একটি ইনটেন্ট অ্যাকশন স্ট্রিং। এই কলামটি থাকলে এবং প্রদত্ত সারিতে একটি ভ্যালু থাকলে, সাজেশনের ইনটেন্ট তৈরি করার সময় এখানে সংজ্ঞায়িত অ্যাকশনটি ব্যবহার করা হয়। এলিমেন্ট প্রদান করা না হলে, আপনার সার্চ করা যায় এমন কনফিগারেশনের android:searchSuggestIntentAction ফিল্ড থেকে অ্যাকশন নেওয়া হয়। সব সাজেশনের জন্য আপনার অ্যাকশন একই হলে, android:searchSuggestIntentAction ব্যবহার করে অ্যাকশন নির্দিষ্ট করা এবং এই কলাম বাদ দেওয়া আরও কার্যকর।
SUGGEST_COLUMN_INTENT_DATA
একটি ডেটা URI স্ট্রিং। এই কলামটি থাকলে এবং প্রদত্ত সারিতে একটি মান থাকলে, সাজেশনের ইনটেন্ট তৈরি করার সময় এই ডেটা ব্যবহার করা হয়। এলিমেন্ট প্রদান করা না হলে, আপনার সার্চযোগ্য কনফিগারেশনের android:searchSuggestIntentData ফিল্ড থেকে ডেটা নেওয়া হয়। কোনও সোর্সই প্রদান করা না হলে, ইনটেন্টের ডেটা ফিল্ড ফাঁকা থাকে। আপনার ডেটা সব সাজেশনের জন্য একই হলে অথবা একটি কনস্ট্যান্ট অংশ ও নির্দিষ্ট আইডি ব্যবহার করে বর্ণনা করা গেলে, android:searchSuggestIntentData ব্যবহার করে এটি উল্লেখ করা এবং এই কলাম বাদ দেওয়া আরও কার্যকর হবে।
SUGGEST_COLUMN_INTENT_DATA_ID
একটি URI পাথ স্ট্রিং। এই কলামটি থাকলে এবং প্রদত্ত সারিতে কোনও মান থাকলে, "/" এবং এই মানটি ইনটেন্টের ডেটা ফিল্ডে যোগ করা হয়। সার্চ করা যায় এমন কনফিগারেশনে android:searchSuggestIntentData অ্যাট্রিবিউট দ্বারা নির্দিষ্ট করা ডেটা ফিল্ড আগে থেকেই উপযুক্ত বেস স্ট্রিংয়ে সেট করা থাকলে, তবেই এটি ব্যবহার করুন।
SUGGEST_COLUMN_INTENT_EXTRA_DATA
যথেচ্ছ ডেটা। এই কলামটি থাকলে এবং প্রদত্ত সারিতে একটি মান থাকলে, এটি হল অতিরিক্ত ডেটা যা সাজেশন ইনটেন্ট তৈরি করার সময় ব্যবহৃত হয়। প্রদান করা না হলে, ইনটেন্টের অতিরিক্ত ডেটা ফিল্ড খালি থাকে। এই কলামের মাধ্যমে সাজেশন অতিরিক্ত ডেটা প্রদান করে যা ইনটেন্টের EXTRA_DATA_KEY কী-তে অতিরিক্ত হিসেবে অন্তর্ভুক্ত করা হয়।
SUGGEST_COLUMN_QUERY
এই কলাম থাকলে এবং প্রদত্ত সারিতে এই এলিমেন্ট থাকলে, এটি হল সেই ডেটা যা সাজেশনের কোয়েরি তৈরি করার সময় ব্যবহার করা হয়, ইনটেন্টের QUERY কী-তে অতিরিক্ত হিসেবে অন্তর্ভুক্ত করা হয়। সাজেশনের অ্যাকশন ACTION_SEARCH হলে এটি প্রয়োজন, অন্যথায় এটি ঐচ্ছিক।
SUGGEST_COLUMN_SHORTCUT_ID
শুধুমাত্র 'দ্রুত সার্চ বক্স'-এর জন্য সাজেশন দেওয়ার সময় ব্যবহার করা হয়। এই কলাম থেকে বোঝা যায় যে সার্চ সাজেশন শর্টকাট হিসেবে সেভ করতে হবে কিনা এবং সেটি যাচাই করতে হবে কিনা। ব্যবহারকারী 'দ্রুত সার্চ বক্স' থেকে কোনও সাজেশন ট্যাপ করলে সাধারণত শর্টকাট তৈরি হয়। এটি না থাকলে, ফলাফল শর্টকাট হিসেবে সেভ করা হয় এবং কখনও রিফ্রেশ করা হয় না। SUGGEST_NEVER_MAKE_SHORTCUT হিসেবে সেট করা হলে, ফলাফল শর্টকাট হিসেবে সেভ করা হয় না। অন্যথায়, SUGGEST_URI_PATH_SHORTCUT ব্যবহার করে আপ-টু-ডেট সাজেশন চেক করার জন্য শর্টকাট আইডি ব্যবহার করা হয়।
SUGGEST_COLUMN_SPINNER_WHILE_REFRESHING
শুধুমাত্র 'দ্রুত সার্চ বক্স'-এর জন্য সাজেশন দেওয়ার সময় ব্যবহার করা হয়। এই কলাম নির্দিষ্ট করে যে, এই সাজেশনটির শর্টকাট কুইক সার্চ বক্সে রিফ্রেশ করার সময় SUGGEST_COLUMN_ICON_2 থেকে আইকনের পরিবর্তে একটি স্পিনার দেখাতে হবে।

এইসব কলামের বেশিরভাগই নিম্নলিখিত বিভাগে আরও আলোচনা করা হয়েছে।

সাজেশনের জন্য ইনটেন্ট ঘোষণা করা

সার্চ ডায়ালগ বা উইজেটের নিচে দেখানো তালিকা থেকে ব্যবহারকারী কোনও সাজেশন বেছে নিলে, সিস্টেম আপনার সার্চযোগ্য অ্যাক্টিভিটিতে একটি কাস্টম Intent পাঠায়। আপনাকে অবশ্যই ইনটেন্টের জন্য অ্যাকশন এবং ডেটা নির্ধারণ করতে হবে।

ইনটেন্ট অ্যাকশন ঘোষণা করুন

কাস্টম সাজেশন দেখানোর জন্য সবচেয়ে সাধারণ ইনটেন্ট অ্যাকশন হল ACTION_VIEW, যা কোনও কিছু খোলার জন্য উপযুক্ত, যেমন কোনও শব্দের সংজ্ঞা, কোনও ব্যক্তির যোগাযোগের তথ্য বা কোনও ওয়েবপেজ। তবে, ইনটেন্ট অ্যাকশন অন্য যেকোনও অ্যাকশন হতে পারে এবং প্রতিটি সাজেশন অনুযায়ী আলাদা হতে পারে।

আপনি সব সাজেশন একই ইনটেন্ট অ্যাকশন ব্যবহার করুক তা চান কিনা তার উপর নির্ভর করে, আপনি দুটি উপায়ে অ্যাকশনটি নির্ধারণ করতে পারেন:

  • নিচের উদাহরণে যেমন দেখানো হয়েছে, সব সাজেশন সংক্রান্ত অ্যাকশন নির্ধারণ করতে, আপনার সার্চ করা যায় এমন কনফিগারেশন ফাইলের android:searchSuggestIntentAction অ্যাট্রিবিউট ব্যবহার করুন:
    <?xml version="1.0" encoding="utf-8"?>
    <searchable xmlns:android="http://schemas.android.com/apk/res/android"
        android:label="@string/app_label"
        android:hint="@string/search_hint"
        android:searchSuggestAuthority="com.example.MyCustomSuggestionProvider"
        android:searchSuggestIntentAction="android.intent.action.VIEW" >
    </searchable>
  • SUGGEST_COLUMN_INTENT_ACTION কলাম ব্যবহার করে প্রতিটি সাজেশনের জন্য অ্যাকশন নির্ধারণ করুন। এটি করতে, আপনার সাজেশন টেবিলে SUGGEST_COLUMN_INTENT_ACTION কলাম যোগ করুন এবং প্রতিটি সাজেশনের জন্য, এতে ব্যবহার করার জন্য অ্যাকশন রাখুন—যেমন "android.intent.action.VIEW"।

এছাড়াও, আপনি এই দুটি পদ্ধতি একসাথে ব্যবহার করতে পারেন। যেমন, আপনি ডিফল্ট হিসেবে সব সাজেশনের সাথে ব্যবহার করার জন্য android:searchSuggestIntentAction অ্যাট্রিবিউট সহ একটি অ্যাকশন যোগ করতে পারেন, তারপর SUGGEST_COLUMN_INTENT_ACTION কলামে অন্য একটি অ্যাকশন ঘোষণা করে কিছু সাজেশনের জন্য এই অ্যাকশন ওভাররাইড করতে পারেন। আপনি SUGGEST_COLUMN_INTENT_ACTION কলামে কোনও ভ্যালু যোগ না করলে, android:searchSuggestIntentAction অ্যাট্রিবিউটে প্রদান করা ইনটেন্ট ব্যবহার করা হয়।

ইনটেন্ট ডেটা ঘোষণা করুন

ব্যবহারকারী কোনও সাজেশন বেছে নিলে, আপনার সার্চযোগ্য অ্যাক্টিভিটি আপনার সংজ্ঞায়িত অ্যাকশন সহ ইনটেন্ট পায়—যেমনটি আগের বিভাগে আলোচনা করা হয়েছে—তবে কোন সাজেশন বেছে নেওয়া হয়েছে তা শনাক্ত করার জন্য ইনটেন্টকে আপনার অ্যাক্টিভিটির ডেটাও বহন করতে হবে। বিশেষ করে, প্রতিটি সাজেশনের জন্য ডেটা অনন্য হতে হবে, যেমন আপনার SQLite টেবিলের সাজেশনের জন্য সারি আইডি। ইনটেন্ট পাওয়া গেলে, আপনি getData() বা getDataString()-এর মাধ্যমে অ্যাটাচ করা ডেটা ফিরিয়ে আনতে পারবেন।

আপনি দুটি উপায়ে ইনটেন্টের সাথে অন্তর্ভুক্ত ডেটা নির্ধারণ করতে পারবেন:

  • আপনার সাজেশন টেবিলের SUGGEST_COLUMN_INTENT_DATA কলামের মধ্যে প্রতিটি সাজেশনের জন্য ডেটা নির্ধারণ করুন।

    সাজেশন টেবিলে প্রতিটি ইনটেন্টের জন্য প্রয়োজনীয় সব ডেটা সংক্রান্ত তথ্য প্রদান করুন। এর জন্য SUGGEST_COLUMN_INTENT_DATA কলাম যোগ করুন এবং প্রতিটি সারির জন্য অনন্য ডেটা দিয়ে এটি পূরণ করুন। এই কলামের ডেটা ইনটেন্টের সাথে ঠিক সেভাবেই অ্যাটাচ করা হয় যেভাবে আপনি এই কলামে তা উল্লেখ করেন। আপনি তারপর getData() বা getDataString()-এর মাধ্যমে এটি ফিরিয়ে আনতে পারবেন।

  • একটি ডেটা URI-কে দুটি অংশে ভাগ করুন: একটি অংশ যা সব সাজেশনের জন্য সাধারণ এবং অন্য অংশটি প্রতিটি সাজেশনের জন্য অনন্য। এই অংশগুলি যথাক্রমে সার্চ করা যায় এমন কনফিগারেশনের android:searchSuggestintentData অ্যাট্রিবিউট এবং আপনার সাজেশন টেবিলের SUGGEST_COLUMN_INTENT_DATA_ID কলামে রাখুন।

    নিম্নলিখিত উদাহরণে দেখানো হয়েছে যে কীভাবে URI-এর সেই অংশটি ঘোষণা করতে হয় যা আপনার সার্চযোগ্য কনফিগারেশনের android:searchSuggestIntentData অ্যাট্রিবিউটে সব সাজেশনের জন্য সাধারণ:

      <?xml version="1.0" encoding="utf-8"?>
      <searchable xmlns:android="http://schemas.android.com/apk/res/android"
          android:label="@string/app_label"
          android:hint="@string/search_hint"
          android:searchSuggestAuthority="com.example.MyCustomSuggestionProvider"
          android:searchSuggestIntentAction="android.intent.action.VIEW"
          android:searchSuggestIntentData="content://com.example/datatable" >
      </searchable>
      

    আপনার সাজেশন টেবিলের SUGGEST_COLUMN_INTENT_DATA_ID কলামে প্রতিটি সাজেশনের জন্য চূড়ান্ত পাথ—অনন্য অংশ—অন্তর্ভুক্ত করুন। ব্যবহারকারী কোনও সাজেশন বেছে নিলে, সিস্টেম android:searchSuggestIntentData থেকে স্ট্রিং নেয়, একটি স্ল্যাশ (/) যোগ করে, এবং তারপর SUGGEST_COLUMN_INTENT_DATA_ID কলাম থেকে সংশ্লিষ্ট ভ্যালু যোগ করে সম্পূর্ণ কন্টেন্ট URI তৈরি করে। তারপর আপনি getData()-এর মাধ্যমে Uri ফিরিয়ে আনতে পারবেন।

আরও ডেটা যোগ করুন

আপনার ইনটেন্টের সাথে আরও তথ্য প্রকাশ করতে হলে, আপনি আরেকটি টেবিল কলাম যোগ করতে পারেন, যেমন SUGGEST_COLUMN_INTENT_EXTRA_DATA, যা সাজেশন সম্পর্কে অতিরিক্ত তথ্য স্টোর করতে পারে। এই কলামে সেভ করা ডেটা ইনটেন্টের অতিরিক্ত বান্ডেলের EXTRA_DATA_KEY-এ রাখা হয়।

অভিপ্রায় ম্যানেজ করুন

কাস্টম ইনটেন্ট সহ কাস্টম সার্চ সাজেশন দেওয়ার পরে, ব্যবহারকারী কোনও সাজেশন বেছে নিলে এইসব ইনটেন্ট ম্যানেজ করার জন্য আপনার সার্চযোগ্য অ্যাক্টিভিটি প্রয়োজন। এটি ACTION_SEARCH ইনটেন্ট ম্যানেজ করার পাশাপাশি আপনার সার্চযোগ্য অ্যাক্টিভিটি আগে থেকেই করে। আপনার অ্যাক্টিভিটির onCreate() কলব্যাক চলাকালীন আপনি কীভাবে ইনটেন্ট ম্যানেজ করতে পারেন তার একটি উদাহরণ এখানে দেওয়া হল:

Kotlin

when(intent.action) {
    Intent.ACTION_SEARCH -> {
        // Handle the normal search query case.
        intent.getStringExtra(SearchManager.QUERY)?.also { query ->
            doSearch(query)
        }
    }
    Intent.ACTION_VIEW -> {
        // Handle a suggestions click, because the suggestions all use ACTION_VIEW.
        showResult(intent.data)
    }
}

জাভা

Intent intent = getIntent();
if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
    // Handle the normal search query case.
    String query = intent.getStringExtra(SearchManager.QUERY);
    doSearch(query);
} else if (Intent.ACTION_VIEW.equals(intent.getAction())) {
    // Handle a suggestions click, because the suggestions all use ACTION_VIEW.
    Uri data = intent.getData();
    showResult(data);
}

এই উদাহরণে, ইনটেন্ট অ্যাকশন হল ACTION_VIEW এবং ডেটা সাজেস্ট করা আইটেমের দিকে নির্দেশ করে একটি সম্পূর্ণ URI বহন করে, যা android:searchSuggestIntentData স্ট্রিং এবং SUGGEST_COLUMN_INTENT_DATA_ID কলাম দ্বারা সংশ্লেষিত হয়। URI তারপর লোকাল showResult() পদ্ধতিতে পাস করে যা URI দ্বারা নির্দিষ্ট করা আইটেমের জন্য কন্টেন্ট প্রোভাইডারকে কোয়েরি করে।

কোয়েরি টেক্সট আবার লিখুন

ডিফল্ট হিসেবে, ব্যবহারকারী যদি ট্র্যাকবল বা ডি-প্যাডের মতো ডিরেকশনাল কন্ট্রোল ব্যবহার করে সাজেশন তালিকার মাধ্যমে নেভিগেট করেন, তাহলে কোয়েরি টেক্সট আপডেট হয় না। তবে, আপনি সাময়িকভাবে ব্যবহারকারীর কোয়েরি টেক্সট আবার লিখতে পারেন, যেমনটি টেক্সট বক্সে ফোকাসে থাকা সাজেশনের সাথে মেলে এমন কোয়েরির সাথে দেখা যায়। এর ফলে ব্যবহারকারী সাজেস্ট করা কোয়েরি দেখতে পান এবং সার্চ বক্স বেছে নিয়ে সার্চ করার জন্য পাঠানোর আগে কোয়েরি এডিট করতে পারেন।

আপনি নিম্নলিখিত উপায়ে কোয়েরি টেক্সট আবার লিখতে পারেন:

  • "queryRewriteFromText" ভ্যালু সহ আপনার সার্চ করা যায় এমন কনফিগারেশনে android:searchMode অ্যাট্রিবিউট যোগ করুন। এই ক্ষেত্রে, কোয়েরি টেক্সট আবার লেখার জন্য সাজেশনের SUGGEST_COLUMN_TEXT_1 কলামের কন্টেন্ট ব্যবহার করা হয়।
  • "queryRewriteFromData" ভ্যালু সহ আপনার সার্চ করা যায় এমন\ কনফিগারেশনে android:searchMode অ্যাট্রিবিউট যোগ করুন। এই ক্ষেত্রে, কোয়েরি টেক্সট আবার লেখার জন্য সাজেশনের SUGGEST_COLUMN_INTENT_DATA কলামের কন্টেন্ট ব্যবহার করা হয়। এটি শুধুমাত্র URI বা অন্যান্য ডেটা ফর্ম্যাটের সাথে ব্যবহার করুন যা ব্যবহারকারীকে দেখানোর জন্য তৈরি করা হয়েছে, যেমন HTTP URL। এইভাবে কোয়েরি আবার লেখার জন্য ইন্টার্নাল URI স্কিম ব্যবহার করবেন না।
  • আপনার সাজেশন টেবিলের SUGGEST_COLUMN_QUERY কলামে একটি অনন্য কোয়েরি টেক্সট স্ট্রিং প্রদান করুন। এই কলামটি উপস্থিত থাকলে এবং বর্তমান সাজেশনের জন্য কোনও ভ্যালু থাকলে, এটি কোয়েরি টেক্সট আবার লিখতে এবং আগের যেকোনও ইমপ্লিমেন্টেশন ওভাররাইড করতে ব্যবহার করা হয়।

কুইক সার্চ বক্সে সার্চ সাজেশন দেখান

কাস্টম সার্চ সাজেশন দেওয়ার জন্য আপনার অ্যাপ কনফিগার করার পরে, বিশ্বব্যাপী অ্যাক্সেসযোগ্য দ্রুত সার্চ বক্সে সেগুলি উপলভ্য করা আপনার সার্চযোগ্য কনফিগারেশন পরিবর্তন করার মতোই সহজ, যাতে android:includeInGlobalSearch-এর সাথে "true" ভ্যালু অন্তর্ভুক্ত থাকে।

আপনার কন্টেন্ট প্রোভাইডার রিড পার্মিশন চাইলে, তবেই অতিরিক্ত কাজ করার প্রয়োজন হয়। সেই ক্ষেত্রে, আপনার কন্টেন্ট প্রোভাইডারকে 'দ্রুত সার্চ বক্স' রিড অ্যাক্সেস দেওয়ার জন্য, আপনাকে প্রোভাইডারের জন্য একটি <path-permission> এলিমেন্ট যোগ করতে হবে, যেমনটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে:

<provider android:name="MySuggestionProvider"
          android:authorities="com.example.MyCustomSuggestionProvider"
          android:readPermission="com.example.provider.READ_MY_DATA"
          android:writePermission="com.example.provider.WRITE_MY_DATA">
  <path-permission android:pathPrefix="/search_suggest_query"
                   android:readPermission="android.permission.GLOBAL_SEARCH" />
</provider>

এই উদাহরণে, পরিষেবা প্রদানকারী কন্টেন্ট পড়া ও লেখার অ্যাক্সেস সীমিত করে। <path-permission> এলিমেন্ট "/search_suggest_query" পাথ প্রিফিক্সের মধ্যে থাকা কন্টেন্টে পড়ার অ্যাক্সেস দিয়ে বিধিনিষেধ সংশোধন করে, যখন "android.permission.GLOBAL_SEARCH" অনুমতি থাকে। এটি কুইক সার্চ বক্স অ্যাক্সেস করার অনুমতি দেয় যাতে এটি সাজেশনের জন্য আপনার কন্টেন্ট প্রোভাইডারকে কোয়েরি করতে পারে।

আপনার কন্টেন্ট প্রোভাইডার রিড পার্মিশন এনফোর্স না করলে, ডিফল্ট হিসেবে কুইক সার্চ বক্স এটি পড়ে।

কোনও ডিভাইসে সাজেশন চালু করা

ডিফল্ট হিসেবে, অ্যাপগুলি 'দ্রুত সার্চ বক্স'-এ সাজেশন দেওয়ার জন্য চালু করা থাকে না, এমনকি সেগুলি যদি তা করার জন্য কনফিগার করা থাকে তাহলেও। ব্যবহারকারী বেছে নেন যে আপনার অ্যাপ থেকে সাজেশন 'দ্রুত সার্চ বক্স'-এ অন্তর্ভুক্ত করা হবে কিনা, এর জন্য তিনি সার্চ করা যায় এমন আইটেম—যা সেটিংস > সার্চ-এ অবস্থিত—খোলেন এবং আপনার অ্যাপকে সার্চ করা যায় এমন আইটেম হিসেবে চালু করেন।

'দ্রুত সার্চ বক্স'-এ উপলভ্য প্রতিটি অ্যাপের এন্ট্রি সার্চ করা যায় এমন আইটেম সেটিংস পৃষ্ঠায় থাকে। এন্ট্রিতে অ্যাপের নাম এবং অ্যাপ থেকে কোন কন্টেন্ট সার্চ করা যাবে তার সংক্ষিপ্ত বিবরণ অন্তর্ভুক্ত থাকে এবং 'দ্রুত সার্চ বক্স'-এ সাজেশন হিসেবে উপলভ্য করা হয়। আপনার সার্চ করা যায় এমন অ্যাপের জন্য বিবরণ টেক্সট নির্ধারণ করতে, আপনার সার্চ করা যায় এমন কনফিগারেশনে android:searchSettingsDescription অ্যাট্রিবিউট যোগ করুন, যেমনটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে:

<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
    android:label="@string/app_label"
    android:hint="@string/search_hint"
    android:searchSuggestAuthority="com.example.MyCustomSuggestionProvider"
    android:searchSuggestIntentAction="android.intent.action.VIEW"
    android:includeInGlobalSearch="true"
    android:searchSettingsDescription="@string/search_description" >
</searchable>

android:searchSettingsDescription-এর জন্য স্ট্রিং যতটা সম্ভব সংক্ষিপ্ত করুন এবং সার্চ করা যায় এমন কন্টেন্ট উল্লেখ করুন। যেমন, মিউজিক অ্যাপের জন্য "শিল্পী, অ্যালবাম ও ট্র্যাক" অথবা নোটপ্যাড অ্যাপের জন্য "সেভ করা নোট"। এই বিবরণ দেওয়া গুরুত্বপূর্ণ যাতে ব্যবহারকারী জানতে পারেন যে কী ধরনের পরামর্শ দেওয়া হয়েছে। android:includeInGlobalSearch সত্য হলে, সবসময় এই অ্যাট্রিবিউট অন্তর্ভুক্ত করুন।

কারণ আপনার অ্যাপের জন্য সার্চ সাজেশন চালু করতে ব্যবহারকারীকে অবশ্যই সেটিংস মেনুতে যেতে হবে, যদি সার্চ আপনার অ্যাপের একটি গুরুত্বপূর্ণ দিক হয়, তাহলে আপনার ব্যবহারকারীদের কাছে কীভাবে তা পৌঁছে দেবেন তা বিবেচনা করুন। যেমন, ব্যবহারকারী প্রথমবার অ্যাপ চালু করলে আপনি হয়ত একটি নোট প্রদান করতে পারেন যেখানে ব্যাখ্যা করা আছে যে কীভাবে 'দ্রুত সার্চ বক্স'-এর জন্য সার্চ সাজেশন চালু করতে হয়।

কুইক সার্চ বক্স সাজেশন শর্টকাট ম্যানেজ করুন

ব্যবহারকারী 'দ্রুত সার্চ বক্স' থেকে যে সাজেশন বেছে নেন, তা অটোমেটিক শর্টকাট হিসেবে তৈরি করা যেতে পারে। এগুলি হল এমন সাজেশন যা সিস্টেম আপনার কন্টেন্ট প্রোভাইডার থেকে কপি করে যাতে আপনার কন্টেন্ট প্রোভাইডারকে আবার কোয়েরি না করেই এটি দ্রুত সাজেশন অ্যাক্সেস করতে পারে।

ডিফল্ট হিসেবে, এটি দ্রুত সার্চ বক্সের মাধ্যমে পাওয়া সব সাজেশন দেখায়, তবে আপনার সাজেশন ডেটা সময়ের সাথে সাথে পরিবর্তিত হলে, আপনি শর্টকাট রিফ্রেশ করার অনুরোধ করতে পারেন। যেমন, আপনার সাজেশন যদি ডায়নামিক ডেটা, যেমন কোনও পরিচিতির উপস্থিতির স্ট্যাটাস, রেফার করে, তাহলে সাজেশন শর্টকাট ব্যবহারকারীকে দেখানোর সময় রিফ্রেশ করার অনুরোধ করুন। এটি করতে, আপনার সাজেশন টেবিলে SUGGEST_COLUMN_SHORTCUT_ID অন্তর্ভুক্ত করুন। আপনি এই কলাম ব্যবহার করে নিম্নলিখিত উপায়ে প্রতিটি সাজেশন অনুযায়ী শর্টকাটের আচরণ কনফিগার করতে পারবেন:

  • সাজেশন শর্টকাটের নতুন ভার্সনের জন্য কুইক সার্চ বক্সকে আপনার কন্টেন্ট প্রোভাইডারকে আবার কোয়েরি করতে দিন।

    প্রতিবার শর্টকাট দেখানোর সময় নতুন ভার্সনের জন্য সাজেশন আবার কোয়েরি করতে SUGGEST_COLUMN_SHORTCUT_ID কলামে একটি ভ্যালু দিন। রিফ্রেশ কোয়েরি ফিরে না আসা পর্যন্ত শর্টকাটটি দ্রুত সাম্প্রতিকতম ডেটা দেখায়, যেখানে নতুন তথ্যের সাথে সাজেশন রিফ্রেশ করা হয়। রিফ্রেশ কোয়েরি আপনার কন্টেন্ট প্রোভাইডারকে পাঠানো হয়, যার URI পাথ হল SUGGEST_URI_PATH_SHORTCUT—পরিবর্তে SUGGEST_URI_PATH_QUERY।

    আপনার ফেরত দেওয়া Cursor-এ যেন মূল সাজেশনের মতো একই কলাম ব্যবহার করে একটি সাজেশন থাকে অথবা সেটি খালি থাকে, যা নির্দেশ করে যে শর্টকাটটি আর বৈধ নয়—সেক্ষেত্রে, সাজেশনটি অদৃশ্য হয়ে যায় এবং শর্টকাটটি সরিয়ে দেওয়া হয়।

    কোনও সাজেশন যদি এমন ডেটা উল্লেখ করে যা রিফ্রেশ হতে বেশি সময় নিতে পারে, যেমন নেটওয়ার্ক-ভিত্তিক রিফ্রেশ, তাহলে আপনি SUGGEST_COLUMN_SPINNER_WHILE_REFRESHING কলামটি আপনার সাজেশন টেবিলে true ভ্যালু সহ যোগ করতে পারেন যাতে রিফ্রেশ সম্পূর্ণ না হওয়া পর্যন্ত ডানদিকের আইকনের জন্য একটি প্রগ্রেস স্পিনার দেখানো যায়। true ছাড়া অন্য কোনও ভ্যালু প্রোগ্রেস স্পিনার দেখায় না।

  • সাজেশনকে শর্টকাটে কপি করা থেকে সম্পূর্ণভাবে আটকান।

    SUGGEST_COLUMN_SHORTCUT_ID কলামে SUGGEST_NEVER_MAKE_SHORTCUT-এর মান লিখুন। এই ক্ষেত্রে, সাজেশন কখনই শর্টকাটে কপি করা হয় না। আপনি যদি আগে কপি করা সাজেশন একেবারেই দেখতে না চান, তাহলে এটি করতে হবে। আপনি কলামের জন্য সাধারণ ভ্যালু প্রদান করলে, রিফ্রেশ কোয়েরি রিটার্ন না করা পর্যন্ত সাজেশন শর্টকাট দেখানো হয়।

  • ডিফল্ট শর্টকাট অ্যাকশন প্রয়োগ করতে দিন।

    প্রতিটি সাজেশনের জন্য SUGGEST_COLUMN_SHORTCUT_ID খালি রাখুন যা পরিবর্তন হয় না এবং যা শর্টকাট হিসেবে সেভ করা যায়।

আপনার কোনও সাজেশন কখনও পরিবর্তন না হলে, আপনার SUGGEST_COLUMN_SHORTCUT_ID কলামের প্রয়োজন নেই।

কুইক সার্চ বক্স সাজেশন র‍্যাংকিং সম্পর্কে

আপনি একবার কুইক সার্চ বক্সের জন্য আপনার অ্যাপের সার্চ সাজেশন উপলভ্য করলে, কুইক সার্চ বক্স র‍্যাংকিং নির্ধারণ করে যে কোনও নির্দিষ্ট কোয়েরির জন্য ব্যবহারকারীকে কীভাবে সাজেশন দেখানো হবে। এটি নির্ভর করতে পারে যে কতগুলি অন্যান্য অ্যাপে সেই কোয়েরির ফলাফল আছে এবং অন্যান্য অ্যাপের ফলাফলের তুলনায় ব্যবহারকারী কত ঘনঘন আপনার ফলাফল বেছে নেন। আপনার সাজেশন কীভাবে র‍্যাঙ্ক করা হবে বা কোনও নির্দিষ্ট কোয়েরির জন্য আপনার অ্যাপের সাজেশন আদৌ দেখানো হবে কিনা, সেই বিষয়ে কোনও গ্যারেন্টি দেওয়া হয় না। সাধারণত, ভাল কোয়ালিটির ফলাফল প্রদান করলে, আপনার অ্যাপের সাজেশন বিশিষ্ট স্থানে দেখানোর সম্ভাবনা বৃদ্ধি পায় এবং যেসব অ্যাপ খারাপ কোয়ালিটির সাজেশন প্রদান করে, সেগুলি কম র‍্যাঙ্ক করা বা না দেখানোর সম্ভাবনা বেশি থাকে।