Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> Android Searchable之二

Android Searchable之二

編輯:Android開發實例

四、創建Searchable Activity searchable activity根據搜索關鍵字進行搜索,並顯示搜索結果。 當我們在search dialog or widget執行搜索的時候,系統就啟動你的searchable activity ,並把搜索關鍵字用一個aciton為ACTION_SEARCH的Intent傳給你的searchable activity. 你的searchable activity在Intent中通過extra的QUERY來提取搜索關鍵字,執行搜索並顯示搜索結果. 我們需要在AndroidManifest.xml文件中聲明Searchable Activity,以便在search dialog or widget執行搜索的時候,系統啟動該searchable activity並把搜索關鍵字傳給它。 4.1、聲明searchable activity 如何在AndroidManifest.xml文件中聲明Searchable Activity    1. 在activity的<intent-filter> 中添加一個可以接受action為ACTION_SEARCH的intent。    2. 在<meta-data>中指明search dialog or widget的配置文件(即searchable.xml)    比如,示例2:    <application ... >     <activity android:name=".SearchableActivity" >         <intent-filter>             <action android:name="android.intent.action.SEARCH" />         </intent-filter>         <meta-data android:name="android.app.searchable"                    android:resource="@xml/searchable"/>     </activity>     ... </application> <meta-data>必須包括android:name這個屬性,而且其值必須為"android.app.searchable" 還必須包括android:resource這個屬性,它指定了我們的search dialog配置文件。(示例2中指定是the res/xml/searchable.xml). 注意: <intent-filter> 沒有必要加入<category android:name="android.intent.category.DEFAULT" /> , 因為系統是通component name把ACTION_SEARCH intent explicitly顯示的傳遞給searchable activity的 4.2、執行搜索 當你在manifest文件中,聲明好了searchable activity,在你的searchable activity,就可以參照下面的3步執行搜索了。 (1)提取搜索關鍵字 (2)在你的數據中進行搜索 (3)顯示搜索結果 一般來說,你的搜索結果需要要在ListView進行顯示,所有你的searchable activity需要繼承ListActivity。 它包括了一個擁有單一ListView的layout,它為我們使用ListView提供了方便。 4.2.1、提取搜索關鍵字 當用戶在search dialog or widget界面開始搜索的時候,系統將查找一個合適的searchable activity,並給它傳送一個ACTION_SEARCH的intent,該intent把搜索關鍵字保存在extra的QUERY中。當activity的時候,我們必須檢查保存在extra的QUERY中的搜索關鍵字,並提取它。 比如,示例3: @Override public void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);     setContentView(R.layout.search);
    // Get the intent, verify the action and get the query     Intent intent = getIntent();     if (Intent.ACTION_SEARCH.equals(intent.getAction())) {       String query = intent.getStringExtra(SearchManager.QUERY);       doMySearch(query);     } } 在Action為ACTION_SEARCH的intent中,extra的QUERY總是被包含。在示例3提取處理了搜索關鍵字,然後讓doMySearch()函數在執行真正的搜索的。 4.2.2、數據搜索 數據的存儲和搜索都是和你的程序相關的。你可以以各種方式進行數據的存儲和搜索,它才是你的程序更需要關注的。  但是還是有幾點需要注意的: (1)當你的數據存儲在手機的數據庫中時,執行full-text search (using FTS3, rather than a LIKE query) 能提供在文本數據中得到更健壯且速度更快的search。在 sqlite.org 中可以得到FTS3的更多信息, 在 SQLiteDatabase 可以看到Android上的SQLite更多信息 . 可以在 Searchable Dictionary看到一個用FTS3實現搜索的示例。 (2)如果的數據來自互聯網,那麼你的搜索將受制於用戶的數據連接情況。這時我們就需要顯示一個進度條,直到從網路返回搜索結果。 . 在 android.net 可一看到更多的network APIs ,在 Creating a Progress Dialog 可以到看到如何顯示一個進度條。 如果想讓的數據和搜索變得透明,那麼我建議你用一個Adapter返回搜索結果。這種方式,你更容易在ListView中顯示搜索結果。如果你的數據在自於數據庫,那麼通過CursorAdapter向ListView提供搜索結果,如果你的數據來自於其他方式,可以擴展一個BaseAdapter來使用。 4.2.3、結果顯示 正如上面討論的一樣,顯示搜索結果建議使用的UI是ListView,所以你的searchable activity最好繼承於ListActivity,然後是使用setListAdapter()來設置和搜索結果綁定了的Adapter。這樣你的搜索結果就可以顯示在ListView中了。 你可以參考 Searchable Dictionary 示例,它展示了怎麼進行數據庫查詢,怎麼使用Adapter向ListView提供搜索結果。
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved