टीवी पर मीडिया ऐप्लिकेशन का इस्तेमाल करते समय, उपयोगकर्ता अक्सर कुछ खास कॉन्टेंट चुनते हैं. अगर आपके ऐप्लिकेशन में ये चीज़ें शामिल हैं तो हो सकता है कि किसी खास टाइटल को ब्राउज़ करना, कॉन्टेंट के बड़े कैटलॉग के लिए ताकि उपयोगकर्ताओं को वह मिल सके जिसे वे खोज रहे हैं. सर्च इंटरफ़ेस आपके उपयोगकर्ताओं को जो उन्हें ब्राउज़ करने से ज़्यादा तेज़ चाहिए.
androidx.leanback लाइब्रेरी में क्लास का एक सेट होता है, जिससे स्टैंडर्ड सर्च इंटरफ़ेस चालू हो जाता है जो टीवी पर खोज करने की दूसरी सुविधाओं से मेल खाता हो. साथ ही, इसमें ये सुविधाएं मिलती हैं: बोलकर फ़ोन को निर्देश देना.
यह गाइड इस पर चर्चा करती है कि Leanback सहायता का इस्तेमाल करके आपके ऐप्लिकेशन में खोज इंटरफ़ेस कैसे उपलब्ध कराया जाए लाइब्रेरी क्लासेस.
खोज कार्रवाई जोड़ें
जब किसी मीडिया के लिए BrowseFragment
क्लास का इस्तेमाल किया जाता है
तो आप उपयोगकर्ता के स्टैंडर्ड हिस्से के तौर पर सर्च इंटरफ़ेस चालू कर सकते हैं
इंटरफ़ेस पर कॉपी करने की सुविधा मिलती है. सर्च इंटरफ़ेस एक आइकॉन है. यह BrowseFragment
पर View.OnClickListener
सेट करने पर, लेआउट में दिखता है
ऑब्जेक्ट है. नीचे दिया गया सैंपल कोड, इस तकनीक को दिखाता है.
Kotlin
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()) }
Java
@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
क्लास का दायरा बढ़ाने का तरीका बताता है
इस टूल का इस्तेमाल करके खोज इंटरफ़ेस और नतीजे देख सकते हैं:
Kotlin
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 } }
Java
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
क्लास के साथ इस्तेमाल किया जा सकता है
जो एक अलग थ्रेड पर खोज क्वेरी चलाता है. यह तकनीक धीमे काम करती रहती है
मुख्य यूज़र इंटरफ़ेस थ्रेड को ब्लॉक करने से जुड़ी क्वेरी.