W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
編寫:awong1900 - 原文:http://developer.android.com/training/tv/discovery/in-app-search.html
當(dāng)在TV上用媒體應(yīng)用時(shí),用戶腦中通常有期望的內(nèi)容。如果我們的應(yīng)用包含一個(gè)大的內(nèi)容目錄,為用戶找到他們想找到的內(nèi)容時(shí),用特定的標(biāo)題瀏覽可能不是最有效的方式。一個(gè)搜索界面能幫助用戶獲得他們想快速瀏覽的內(nèi)容。
Leanback support library提供一套類庫(kù)去使用標(biāo)準(zhǔn)的搜索界面。在我們的應(yīng)用內(nèi)使用類庫(kù),可以和TV其他搜索功能,如語(yǔ)音搜索,獲得一致性。
這節(jié)課討論如何在我們的應(yīng)用中用Leanback支持類庫(kù)提供搜索界面。
當(dāng)我們用BroweseFragment類做一個(gè)媒體瀏覽界面時(shí),我們能使用搜索界面作為用戶界面的一個(gè)標(biāo)準(zhǔn)部分。當(dāng)我們?cè)O(shè)置View.OnClickListener在BrowseFragment對(duì)象時(shí),搜索界面作為一個(gè)圖標(biāo)出現(xiàn)在布局中。接下來的示例代碼展示了這個(gè)技術(shù)。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.browse_activity);
mBrowseFragment = (BrowseFragment)
getFragmentManager().findFragmentById(R.id.browse_fragment);
...
mBrowseFragment.setOnSearchClickedListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(BrowseActivity.this, SearchActivity.class);
startActivity(intent);
}
});
mBrowseFragment.setAdapter(buildAdapter());
}
**Note**: You can set the color of the search icon using the setSearchAffordanceColor(int).-->Note:我們能設(shè)置搜索圖標(biāo)的顏色用setSearchAffordanceColor(int))。
當(dāng)用戶選擇搜索圖標(biāo),系統(tǒng)通過定義的intent關(guān)聯(lián)一個(gè)搜索activity。我們的搜索activity應(yīng)該用包括SearchFragment的線性布局。這個(gè)fragment必須實(shí)現(xiàn)SearchFragment.SearchResultProvider界面去顯示搜索結(jié)果。
接下來的示例代碼展示了如何擴(kuò)展SearchFragment類去提供搜索界面和結(jié)果:
public class MySearchFragment extends SearchFragment
implements SearchFragment.SearchResultProvider {
private static final int SEARCH_DELAY_MS = 300;
private ArrayObjectAdapter mRowsAdapter;
private Handler mHandler = new Handler();
private SearchRunnable mDelayedLoad;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mRowsAdapter = new ArrayObjectAdapter(new ListRowPresenter());
setSearchResultProvider(this);
setOnItemClickedListener(getDefaultItemClickedListener());
mDelayedLoad = new SearchRunnable();
}
@Override
public ObjectAdapter getResultsAdapter() {
return mRowsAdapter;
}
@Override
public boolean onQueryTextChange(String newQuery) {
mRowsAdapter.clear();
if (!TextUtils.isEmpty(newQuery)) {
mDelayedLoad.setSearchQuery(newQuery);
mHandler.removeCallbacks(mDelayedLoad);
mHandler.postDelayed(mDelayedLoad, SEARCH_DELAY_MS);
}
return true;
}
@Override
public boolean onQueryTextSubmit(String query) {
mRowsAdapter.clear();
if (!TextUtils.isEmpty(query)) {
mDelayedLoad.setSearchQuery(query);
mHandler.removeCallbacks(mDelayedLoad);
mHandler.postDelayed(mDelayedLoad, SEARCH_DELAY_MS);
}
return true;
}
}
上面的示例代碼展示了在分開的線程用獨(dú)立的SearchRunnable
類去運(yùn)行搜索請(qǐng)求。這個(gè)技巧是從正在阻塞的主線程保持了潛在的慢運(yùn)行請(qǐng)求。
下一節(jié): 創(chuàng)建TV游戲應(yīng)用 >
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: