টিভি অ্যাপের মধ্যে অনুসন্ধান করুন

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

androidx.leanback লাইব্রেরি আপনার অ্যাপের মধ্যে একটি স্ট্যান্ডার্ড সার্চ ইন্টারফেস সক্ষম করতে ক্লাসে�� একটি সেট প্রদান করে যা টিভিতে অন্যান্য সার্চ ফাংশনের সাথে সামঞ্জস্যপূর্ণ এবং ভয়েস ইনপুটের মতো ����শিষ্ট্য প্রদান করে।

Leanback সমর্থন লাইব্রেরি ক্লাস ব্যবহার করে কিভাবে আপনার অ্যাপে একটি সার্চ ইন্টারফেস প্রদান করবেন এই গাইডটি আলোচনা করে।

একটি অনুসন্ধান কর্ম যোগ করুন

আপনি যখন মিডিয়া ব্রাউজিং ইন্টারফেসের জন্য BrowseFragment ক্লাস ব্যবহার করেন, আপনি ব্যবহারকারী ইন্টারফেসের একটি আদর্শ অংশ হিসাবে একটি অনুসন্ধান ইন্টারফেস সক্ষম করতে পারেন। অনুসন্ধান ইন্টারফেস হল একটি আইকন যা লেআউটে প্রদর্শিত হয় যখন আপনি BrowseFragment অবজেক্টে View.OnClickListener সেট করেন। নিম্নলিখিত নমুনা কোড এই কৌশল প্রদর্শন করে.

কোটলিন

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.browse_activity)
    browseFragment = fragmentManager.findFragmentById(R.id.browse_fragment) as BrowseFragment
    browseFragment.setOnSearchClickedListener { view ->
        val intent = Intent(this@BrowseActivity, SearchActivity::class.java)
        startActivity(intent)
    }

    browseFragment.setAdapter(buildAdapter())
}

জাভা

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

    browseFragment = (BrowseFragment)
            getFragmentManager().findFragmentById(R.id.browse_fragment);

    ...

    browseFragment.setOnSearchClickedListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent(BrowseActivity.this, SearchActivity.class);
            startActivity(intent);
        }
    });

    browseFragment.setAdapter(buildAdapter());
}

দ্রষ্টব্য: আপনি setSearchAffordanceColor(int) পদ্ধতি ব্যবহার করে অনুসন্ধান আইকনের রঙ সেট করতে পারেন।

একটি অনুসন্ধান ইনপুট এবং ফলাফল যোগ করুন

যখন একজন ব্যবহারকারী অনুসন্ধান আইকন নির্বাচন করেন, সিস্টেমটি সংজ্ঞায়িত অভিপ্রায় ব্যবহার করে একটি অনুসন্ধান কার্যকলাপ আহ্বান করে। আপনার অনুসন্ধান কার্যকলাপের জন্য, একটি SearchFragment ধারণকারী একটি রৈখিক বিন্যাস ব্যবহার করুন। অনুসন্ধানের ফলাফল প্রদর্শন করতে এই খণ্ডটিকে অবশ্যই SearchFragment.SearchResultProvider ইন্টারফেস প্রয়োগ করতে হবে।

নিম্নলিখিত কোড নমুনা দেখায় কিভাবে একটি অনুসন্ধান ইন্টারফেস এবং ফলাফল প্রদান করতে SearchFragment ক্লাস প্রসারিত করতে হয়:

কোটলিন

class MySearchFragment : SearchFragment(), SearchFragment.SearchResultProvider {
    private val rowsAdapter = ArrayObjectAdapter(ListRowPresenter())
    private val handler = Handler()
    private val delayedLoad = SearchRunnable()

    val resultsAdapter: ObjectAdapter
    get() {
        return rowsAdapter
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setSearchResultProvider(this)
        setOnItemClickedListener(getDefaultItemClickedListener())
    }

    fun onQueryTextChange(newQuery: String): Boolean {
        rowsAdapter.clear()
        if (!TextUtils.isEmpty(newQuery)) {
            delayedLoad.setSearchQuery(newQuery)
            handler.removeCallbacks(delayedLoad)
            handler.postDelayed(delayedLoad, SEARCH_DELAY_MS)
        }
        return true
    }

    fun onQueryTextSubmit(query: String): Boolean {
        rowsAdapter.clear()
        if (!TextUtils.isEmpty(query)) {
            delayedLoad.setSearchQuery(query)
            handler.removeCallbacks(delayedLoad)
            handler.postDelayed(delayedLoad, SEARCH_DELAY_MS)
        }
        return true
    }

    companion object {
        private val SEARCH_DELAY_MS = 300
    }
}

জাভা

public class MySearchFragment extends SearchFragment
        implements SearchFragment.SearchResultProvider {

    private static final int SEARCH_DELAY_MS = 300;
    private ArrayObjectAdapter rowsAdapter;
    private Handler handler = new Handler();
    private SearchRunnable delayedLoad;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        rowsAdapter = new ArrayObjectAdapter(new ListRowPresenter());
        setSearchResultProvider(this);
        setOnItemClickedListener(getDefaultItemClickedListener());
        delayedLoad = new SearchRunnable();
    }

    @Override
    public ObjectAdapter getResultsAdapter() {
        return rowsAdapter;
    }

    @Override
    public boolean onQueryTextChange(String newQuery) {
        rowsAdapter.clear();
        if (!TextUtils.isEmpty(newQuery)) {
            delayedLoad.setSearchQuery(newQuery);
            handler.removeCallbacks(delayedLoad);
            handler.postDelayed(delayedLoad, SEARCH_DELAY_MS);
        }
        return true;
    }

    @Override
    public boolean onQueryTextSubmit(String query) {
        rowsAdapter.clear();
        if (!TextUtils.isEmpty(query)) {
            delayedLoad.setSearchQuery(query);
            handler.removeCallbacks(delayedLoad);
            handler.postDelayed(delayedLoad, SEARCH_DELAY_MS);
        }
        return true;
    }
}

পূর্ববর্তী উদাহরণ কোডটি একটি SearchRunnable ক্লাসের সাথে ব্যবহার করা বোঝায় যা একটি পৃথক থ্রেডে অনুসন্ধান ক্যোয়ারী চালায়। এই কৌশলটি সম্ভাব্যভাবে ধীর গতিতে চলমান প্রশ্নগুলিকে প্রধান ব্যবহারকারী ইন্টারফেস থ্রেড ব্লক করা থেকে রাখে।