1、在资源文件夹下创建xml文件夹,并创建一个searchable.xml:

android:searchSuggestAuthorityshux属性的值跟实现SearchRecentSuggestionsProvider类中的setupSuggestions方法的第一个参数相同。
android:searchSuggestSelection 指搜索参数
<?xml version="1.0" encoding="utf-8"?><searchable xmlns:android="http://schemas.android.com/apk/res/android"    android:label="@string/app_label"    android:hint="@string/search_hint"     android:searchSuggestAuthority="com.example.search.provider.MySuggestionProvider"    android:searchSuggestSelection=" ?"></searchable>
2、配置文件 
  2.1 配置全局的搜索框
  启动的activity是
SearchableActivity。分别在MainActivity和OtherActivity调用onSearchRequested()可以激活搜索框。映射是必须有"_id",
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="com.example.search"    android:versionCode="1"    android:versionName="1.0" >    <uses-sdk        android:minSdkVersion="8"        android:targetSdkVersion="17" />    <application        android:allowBackup="true"        android:icon="@drawable/ic_launcher"        android:label="@string/app_name"        android:theme="@style/AppTheme" >        <activity            android:name="com.example.search.MainActivity"            android:label="@string/app_name"            android:launchMode="singleTop" >            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>               <!-- 放在外面就是全局 -->        <meta-data                android:name="android.app.default_searchable"                android:value=".SearchableActivity" />        <!-- 点击搜索结果要跳转到的activity -->        <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>        <activity android:name=".OtherActivity"></activity>        <provider            android:name="com.example.search.provider.MySuggestionProvider"            android:authorities="com.example.search.provider.MySuggestionProvider" />    </application></manifest>

  2.2 为某一个Activity配置搜索框

为MainActivity配置了一个激活SearchableActivity的搜索框。

        <activity            android:name="com.example.search.MainActivity"            android:label="@string/app_name"            android:launchMode="singleTop" >            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>            <!-- 在某个activity的内部,表示当前的activity可以调出搜索框, 指定要激活的 SearchableActivity -->            <meta-data                android:name="android.app.default_searchable"                android:value=".SearchableActivity" />        </activity>                   <!-- 点击搜索结果要跳转到的activity -->        <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>

2.3 搜索之后,停留在当前Activity。

  如果停留在当前Activity,需要设置launchMode="singleTop",并且在当前的Activity加入以下代码,还需要在onCreate方法里面调用handleIntent(intent)方法。

    @Override    protected void onNewIntent(Intent intent) {        setIntent(intent);        handleIntent(intent);    }    private void handleIntent(Intent intent) {if (Intent.ACTION_SEARCH.equals(intent.getAction())) {          String query = intent.getStringExtra(SearchManager.QUERY);          doMySearch(query);        }    }    private void doMySearch(String query) {        Toast.makeText(this, "res: "+query, Toast.LENGTH_SHORT).show();    }

  配置文件

      <activity            android:name="com.example.search.MainActivity"            android:label="@string/app_name"            android:launchMode="singleTop" >            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>                       <intent-filter>                <action android:name="android.intent.action.SEARCH" />            </intent-filter>            <meta-data                android:name="android.app.searchable"                android:resource="@xml/searchable" />        </activity>

3、创建provider

  需要继承SearchRecentSuggestionsProvider类,重写query方法,需要将查询出来的数据转化成MatrixCursor对象然后返回。为了进一步处理,需要将当前点击的项的参数通过SearchManager.SUGGEST_COLUMN_QUERY传过去,在activity接收时intent.getStringExtra(SearchManager.QUERY),在跳转的activity中,就可以继续进行操作。

public class MySuggestionProvider extends SearchRecentSuggestionsProvider {    // AUTHORITY:它的值域searchable.xml中的searchSuggestAuthority一样    public final static String AUTHORITY = "com.example.search.provider.MySuggestionProvider";    public final static int MODE = DATABASE_MODE_QUERIES;    public MySuggestionProvider() {        setupSuggestions(AUTHORITY, MODE);    }    @Override    public Cursor query(Uri uri, String[] projection, String selection,            String[] selectionArgs, String sortOrder) {        // 在搜索框中输入的值        String query = selectionArgs[0];                Log.i("tag", query);        Log.i("tag", uri.getLastPathSegment().toLowerCase());        return getSuggestions(query);    }    private Cursor getSuggestions(String query) {        String processedQuery = query == null ? "" : query.toLowerCase();        List<Person> persons = DataSource.getInstance().getPersons(processedQuery);        MatrixCursor cursor = new MatrixCursor(COLUMNS);        long id = 0;        for (Person person : persons) {            cursor.addRow(columnValuesOfWord(id++, person));        }        return cursor;    }    private Object[] columnValuesOfWord(long id, Person person) {        return new Object[] { id, // _id                person.name, // text1                person.id, // text2                person.name        };    }    private static final String[] COLUMNS = { "_id",            SearchManager.SUGGEST_COLUMN_TEXT_1,            SearchManager.SUGGEST_COLUMN_TEXT_2,            SearchManager.SUGGEST_COLUMN_QUERY//            SearchManager.SUGGEST_COLUMN_INTENT_DATA,// 数据传递到intenter中    };}

http://www.cnblogs.com/zhengbeibei/archive/2013/01/17/2865610.html

更多相关文章

  1. Android中两种设置全屏的方法
  2. :activity状态的保存和保持
  3. Android(安卓)是否前台运行
  4. Android(安卓)SDK离线安装
  5. 浅谈Java中Collections.sort对List排序的两种方法
  6. Python list sort方法的具体使用
  7. python list.sort()根据多个关键字排序的方法实现
  8. android上一些方法的区别和用法的注意事项
  9. 读取android手机流量信息

随机推荐

  1. React 16
  2. 保姆级 tomcat 快速入门
  3. Docker简介
  4. Nodejs进程间通信
  5. 如何在 Java 中构造对象(学习 Java 编程语
  6. No.6 关于变量名前加$以及不加$的区别
  7. Node中的流
  8. 自学第四十九天
  9. Progressive Web Apps
  10. linux课程1-15