কাস্টম অনুসন্ধান পরামর্শ যোগ করুন

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

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

বুনিয়াদি

চিত্র 1. সাম্প্রতিক ক্যোয়ারী পরামর্শ সহ একটি অনুসন্ধান ডায়ালগের স্ক্রিনশট।

সাম্প্রতিক ক্যোয়ারী পরামর্শ সংরক্ষিত অনুসন্ধান. যখন ব্যবহারকারী একটি পরামর্শ নির্বাচন করেন, তখন আপনার অনুসন্ধানযোগ্য কার্যকলাপ একটি ACTION_SEARCH অভিপ্রায় প্রাপ্ত করে পরামর্শের সাথে অনুসন্ধান ক্যোয়ারী যা আপনার অনুসন্ধানযোগ্য কার্যকলাপ ইতিমধ্যে পরিচালনা করে।

সাম্প্রতিক প্রশ্নের পরামর্শ প্রদান করার জন্য, আপনাকে করতে হবে:

  • একটি অনুসন্ধানযোগ্য কার্যকলাপ বাস্তবায়ন.
  • একটি বিষয়বস্তু প্রদানকারী তৈরি করুন যা SearchRecentSuggestionsProvider প্রসারিত করে এবং আপনার অ্যাপ্লিকেশন ম্যানিফেস্টে এটি ঘোষণা করুন।
  • অনুসন্ধানের পরামর্শ প্রদানকারী বিষয়বস্তু প্রদানকারী সম্পর্কে তথ্য সহ অনুসন্ধানযোগ্য কনফিগারেশন পরিবর্তন করুন।
  • প্রতিবার অনুসন্ধান চালানো হলে আপনার সামগ্রী প্রদানকারীর কাছে প্রশ্নগুলি সংরক্ষণ করুন৷

যেমন অ্যান্ড্রয়েড সিস্টেম অনুসন্ধান ডায়ালগ প্রদর্শন করে, এটি ডায়ালগ বা অনুসন্ধান উইজেটের নীচে অনুসন্ধান পরামর্শগুলি প্রদর্শন করে। আপনি সেই উৎস প্রদান করেন যেটি সিস্টেম থেকে পরামর্শগুলি পুনরুদ্ধার করে।

যখন সিস্টেম শনাক্ত করে যে আপনার কার্যকলাপ অনুসন্ধানযোগ্য এবং অনুসন্ধানের পরামর্শ প্রদান করে, যখন ব্যবহারকারী একটি প্রশ্ন টাইপ করে তখন নিম্নলিখিতগুলি ঘটে:

  1. সিস্টেম সার্চ ক্যোয়ারী টেক্সট নেয়—যাই ব্যবহারকারী টাইপ করা শুরু করুক না কেন—এবং আপনার পরামর্শ ধারণ করে এমন সামগ্রী প্রদানকারীর কাছে একটি ক্যোয়ারী করে।
  2. আপনার সামগ্রী প্রদানকারী একটি Cursor ফেরত দেয় যা অনুসন্ধান ক্যোয়ারী পাঠ্যের সাথে মেলে এমন সমস্ত পরামর্শের দিকে নির্দেশ করে৷
  3. সিস্টেমটি Cursor দ্বারা প্রদত্ত পরামর্শের তালিকা প্রদর্শন করে।

একবার সাম্প্রতিক ক্যোয়ারী পরামর্শগুলি প্রদর্শিত হলে, নিম্নলিখিতগুলি ঘটতে পারে:

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

আপনি আপনার সামগ্রী প্রদানকারীর জন্য যে SearchRecentSuggestionsProvider ক্লাসটি প্রসারিত করেন তা পূর্ববর্তী ধাপে স্বয়ংক্রিয়ভাবে কাজ করে, তাই লেখার জন্য সামান্য কোড আছে।

একটি বিষয়বস্তু প্রদানকারী তৈরি করুন

সাম্প্রতিক ক্যোয়ারী সাজেশনের জন্য আপনার যে কন্টেন্ট প্রদানকারীর প্রয়োজন তা হল SearchRecentSuggestionsProvider এর বাস্তবায়ন। এই ক্লাস আপনার জন্য সবকিছু করে. আপনাকে কেবল একটি ক্লাস কনস্ট্রাক্টর লিখতে হবে যা কোডের একটি লাইন কার্যকর করে।

উদাহরণস্বরূপ, সাম্প্রতিক ক্যোয়ারী সাজেশনের জন্য এখানে একটি বিষয়বস্তু প্রদানকারীর সম্পূর্ণ বাস্তবায়ন রয়েছে:

কোটলিন

class MySuggestionProvider : SearchRecentSuggestionsProvider() {
    init {
        setupSuggestions(AUTHORITY, MODE)
    }

    companion object {
        const val AUTHORITY = "com.example.MySuggestionProvider"
        const val MODE: Int = SearchRecentSuggestionsProvider.DATABASE_MODE_QUERIES
    }
}

জাভা

public class MySuggestionProvider extends SearchRecentSuggestionsProvider {
    public final static String AUTHORITY = "com.example.MySuggestionProvider";
    public final static int MODE = DATABASE_MODE_QUERIES;

    public MySuggestionProvider() {
        setupSuggestions(AUTHORITY, MODE);
    }
}

setupSuggestions() এর কলটি অনুসন্ধান কর্তৃপক্ষের নাম এবং একটি ডাটাবেস মোড পাস করে। অনুসন্ধান কর্তৃপক্ষ যে কোনো অনন্য স্ট্রিং হতে পারে, কিন্তু সর্বোত্তম অনুশীলন হল আপনার সামগ্রী প্রদানকারীর জন্য একটি সম্পূর্ণ যোগ্য নাম ব্যবহার করা, যেমন প্যাকেজের নাম প্রদানকারীর শ্রেণীর নাম অনুসরণ করা। উদাহরণস্বরূপ, "com.example.MySuggestionProvider"

ডাটাবেস মোডে অবশ্যই DATABASE_MODE_QUERIES অন্তর্ভুক্ত থাকতে হবে এবং ঐচ্ছিকভাবে DATABASE_MODE_2LINES অন্তর্ভুক্ত করতে পারে, যা প্রস্তাবনা সারণীতে একটি কলাম যুক্ত করে যাতে আপনি প্রতিটি পরামর্শের সাথে পাঠ্যের একটি দ্বিতীয় লাইন প্রদান করতে পারেন। আপনি যদি প্রতিটি পরামর্শে দুটি লাইন প্রদান করতে চান তবে নিম্নলিখিত উদাহরণটি দেখুন:

কোটলিন

const val MODE: Int = DATABASE_MODE_QUERIES or DATABASE_MODE_2LINES

জাভা

public final static int MODE = DATABASE_MODE_QUERIES | DATABASE_MODE_2LINES;

আপনার SearchRecentSuggestionsProvider ক্লাসে এবং অনুসন্ধানযোগ্য কনফিগারেশনে ব্যবহৃত একই অথরিটি স্ট্রিং সহ আপনার অ্যাপ্লিকেশন ম্যানিফেস্টে সামগ্রী প্রদানকারীকে ঘোষণা করুন৷ যেমন:

<application>
    <provider android:name=".MySuggestionProvider"
              android:authorities="com.example.MySuggestionProvider" />
    ...
</application>

অনুসন্ধানযোগ্য কনফিগারেশন পরিবর্তন করুন

আপনার পরামর্শ প্রদানকারী ব্যবহার করার জন্য সিস্টেমটি কনফিগার করতে, আপনার অনুসন্ধানযোগ্য কনফিগারেশন ফাইলের <searchable> উপাদানটিতে android:searchSuggestAuthority এবং 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.MySuggestionProvider"
    android:searchSuggestSelection=" ?" >
</searchable>

android:searchSuggestAuthority এর মানটি আপনার বিষয়বস্তু প্রদানকারীর জন্য একটি সম্পূর্ণ যোগ্য নাম হতে হবে যা বিষয়বস্তু প্রদানকারীতে ব্যবহৃত কর্তৃপক্ষের সাথে হুবহু মেলে, যেমন "com.example.MySuggestionProvider" পূর্ববর্তী উদাহরণে।

android:searchSuggestSelection এর মান অবশ্যই একটি স্থানের আগে একটি প্রশ্ন চিহ্ন হতে হবে: " ?" . এটি SQLite নির্বাচন আর্গুমেন্টের জন্য একটি স্থানধারক, এবং এটি স্বয়ংক্রিয়ভাবে ব্যবহারকারীর দ্বারা প্রবেশ করা ক্যোয়ারী টেক্সট দ্বারা প্রতিস্থাপিত হয়।

প্রশ্ন সংরক্ষণ করুন

আপনার সাম্প্রতিক প্রশ্নের সংগ্রহের জন্য, আপনার অনুসন্ধানযোগ্য কার্যকলাপ দ্বারা প্রাপ্ত প্রতিটি প্রশ্ন আপনার SearchRecentSuggestionsProvider এ যোগ করুন। এটি করার জন্য, SearchRecentSuggestions এর একটি দৃষ্টান্ত তৈরি করুন এবং আপনার অনুসন্ধানযোগ্য কার্যকলাপ যখনই একটি ক্যোয়ারী পায় তখন saveRecentQuery() কে কল করুন। উদাহরণস্বরূপ, আপনার কার্যকলাপের onCreate() পদ্ধতির সময় আপনি কীভাবে প্রশ্নটি সংরক্ষণ করতে পারেন তা এখানে রয়েছে:

কোটলিন

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.main)

    if (Intent.ACTION_SEARCH == intent.action) {
        intent.getStringExtra(SearchManager.QUERY)?.also { query ->
            SearchRecentSuggestions(this, MySuggestionProvider.AUTHORITY, MySuggestionProvider.MODE)
                    .saveRecentQuery(query, null)
        }
    }
}

জাভা

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Intent intent  = getIntent();

    if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
        String query = intent.getStringExtra(SearchManager.QUERY);
        SearchRecentSuggestions suggestions = new SearchRecentSuggestions(this,
                MySuggestionProvider.AUTHORITY, MySuggestionProvider.MODE);
        suggestions.saveRecentQuery(query, null);
    }
}

SearchRecentSuggestionsProvider কনস্ট্রাক্টরের জন্য আপনার সামগ্রী প্রদানকারীর দ্বারা ঘোষিত একই কর্তৃপক্ষ এবং ডাটাবেস মোড প্রয়োজন৷

saveRecentQuery() পদ্ধতিটি অনুসন্ধান ক্যোয়ারী স্ট্রিংটিকে প্রথম প্যারামিটার হিসাবে নেয় এবং বিকল্পভাবে, পরামর্শের দ্বিতীয় লাইন বা নাল হিসাবে অন্তর্ভুক্ত করার জন্য একটি দ্বিতীয় স্ট্রিং। দ্বিতীয় প্যারামিটারটি শুধুমাত্র তখনই ব্যবহৃত হয় যখন আপনি DATABASE_MODE_2LINES এর মাধ্যমে অনুসন্ধানের পরামর্শের জন্য দুই-লাইন মোড সক্ষম করেন। আপনি যদি দুই-লাইন মোড সক্ষম করেন, তাহলে সিস্টেম যখন মিলিত পরামর্শের জন্য অনুসন্ধান করে তখন কোয়েরি পাঠ্যটি দ্বিতীয় লাইনের সাথে মেলে।

সাজেশন ডেটা সাফ করুন

ব্যবহারকারীর গোপনীয়তা রক্ষা করতে, সর্বদা ব্যবহারকারীর সাম্প্রতিক ক্যোয়ারী পরামর্শগুলি সাফ করার জন্য একটি উপায় প্রদান করুন৷ ক্যোয়ারী ইতিহাস সাফ করতে, clearHistory() কল করুন। যেমন:

কোটলিন

SearchRecentSuggestions(this, HelloSuggestionsProvider.AUTHORITY, HelloSuggestionsProvider.MODE)
        .clearHistory()

জাভা

SearchRecentSuggestions suggestions = new SearchRecentSuggestions(this,
        HelloSuggestionProvider.AUTHORITY, HelloSuggestionProvider.MODE);
suggestions.clearHistory();

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