background image

5. </intent-filter>
6. <meta-data android:name="android.app.searchable"
7. android:resource="@xml/searchable"/>
8. </activity>
9. <activity android:name=".AnotherActivity" ... >
10. </activity>
11. <!—这个配置就可以让你在整个应用程序中调用搜索框 -->
12. <meta-data android:name="android.app.default_searchable"
13. android:value=".MySearchableActivity" />
14. ...
15. </application>

上面代码中

android:name=”android.app.default_searchable” 定义一个响应搜索框

搜索请求的名称,

android:value 指定是由哪个 Activity 响应并执行搜索。当我们在应用

程序中的

OtherAcitivity 中执行搜索请求时,MySearchableActivity 将会被加载用于执

行搜索并显示搜索结果。

执行一个搜索
当一个

Activity 声明为可搜索时,执行实际的搜索包括三个步骤:接收查询,检索你的数

据,并提交结果。
通常情况下,你的搜索结果需要在一个

ListView 中展现,所以你用于执行搜索的

Acitivity 要继承 ListActivity,这样,可以方便的访问 ListView 的 Api。

接收搜索查询
当从搜索对话框执行搜索时,刚才配置的可用于搜索的

Acitivity 将会被 Intent 激活,同

时带着一些搜索相关的参数,你需要检查

Intent 并做出搜索响应,如下所示:

1. @Override
2. public void onCreate(Bundle savedInstanceState) {
3. super.onCreate(savedInstanceState);
4. setContentView(R.layout.search);
5.
6. Intent intent = getIntent();
7. //判断是否是搜索请求
8. if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
9. //获取搜索的查询内容(关键字)
10. String query = intent.getStringExtra(SearchManager.QUERY);
11. //执行相应的查询动作
12. doMySearch(query);
13. }
14. }

doMySearch()方法将根据关键字查询数据库,或从网络上查询数据,如果是耗时的搜索,
你还需要使用进度条,来告诉用户搜索正在进行,最后返回结果后,可以调用

ListView 的