- Android入門基礎:從這裡開始
- Android分享操作
- Android多媒體
- Android圖像與動畫
- Android網絡連接與雲服務
- Android聯繫人與位置信息
- Android可穿戴應用
- Android TV應用
- Android企業級應用
- Android交互設計
- Android界面設計
- Android用戶輸入
- Android後臺任務
- Android性能優化
- Android安全與隱私
- Android測試程序
使用TV應用進行搜索
編寫:awong1900 - 原文:http://developer.android.com/training/tv/discovery/in-app-search.html
當在TV上用媒體應用時,用戶腦中通常有期望的內容。如果我們的應用包含一個大的內容目錄,為用戶找到他們想找到的內容時,用特定的標題瀏覽可能不是最有效的方式。一個搜索界面能幫助用戶獲得他們想快速瀏覽的內容。
Leanback support library提供一套類庫去使用標準的搜索界面。在我們的應用內使用類庫,可以和TV其他搜索功能,如語音搜索,獲得一致性。
這節課討論如何在我們的應用中用Leanback支持類庫提供搜索界面。
添加搜索操作
當我們用BroweseFragment類做一個媒體瀏覽界面時,我們能使用搜索界面作為用戶界面的一個標準部分。當我們設置View.OnClickListener在BrowseFragment對象時,搜索界面作為一個圖標出現在佈局中。接下來的示例代碼展示了這個技術。
@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:我們能設置搜索圖標的顏色用setSearchAffordanceColor(int)。
添加搜索輸入和結果展示
當用戶選擇搜索圖標,系統通過定義的intent關聯一個搜索activity。我們的搜索activity應該用包括SearchFragment的線性佈局。這個fragment必須實現SearchFragment.SearchResultProvider界面去顯示搜索結果。
接下來的示例代碼展示瞭如何擴展SearchFragment類去提供搜索界面和結果:
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;
}
}
上面的示例代碼展示了在分開的線程用獨立的SearchRunnable
類去運行搜索請求。這個技巧是從正在阻塞的主線程保持了潛在的慢運行請求。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论