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

  1. android:searchSuggestAuthorityshux属性的值跟实现SearchRecentSuggestionsProvider类中的setupSuggestions方法的第一个参数相同。
    android:searchSuggestSelection 指搜索参数
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <searchable xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:label="@string/app_label"
  4. android:hint="@string/search_hint"
  5. android:searchSuggestAuthority="com.example.search.provider.MySuggestionProvider"
  6. android:searchSuggestSelection=" ?">
  7. </searchable>
  1. 2、配置文件
      2.1 配置全局的搜索框
      启动的activitySearchableActivity。分别在MainActivityOtherActivity调用onSearchRequested()可以激活搜索框。映射是必须有"_id"
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  3. package="com.example.search"
  4. android:versionCode="1"
  5. android:versionName="1.0" >
  6.  
  7. <uses-sdk
  8. android:minSdkVersion="8"
  9. android:targetSdkVersion="17" />
  10.  
  11. <application
  12. android:allowBackup="true"
  13. android:icon="@drawable/ic_launcher"
  14. android:label="@string/app_name"
  15. android:theme="@style/AppTheme" >
  16. <activity
  17. android:name="com.example.search.MainActivity"
  18. android:label="@string/app_name"
  19. android:launchMode="singleTop" >
  20. <intent-filter>
  21. <action android:name="android.intent.action.MAIN" />
  22.  
  23. <category android:name="android.intent.category.LAUNCHER" />
  24. </intent-filter>
  25. </activity>
  26.  
  27. <!-- 放在外面就是全局 -->
  28. <meta-data
  29. android:name="android.app.default_searchable"
  30. android:value=".SearchableActivity" />
  31. <!-- 点击搜索结果要跳转到的activity -->
  32. <activity android:name=".SearchableActivity" >
  33. <intent-filter>
  34. <action android:name="android.intent.action.SEARCH" />
  35. </intent-filter>
  36. <meta-data
  37. android:name="android.app.searchable"
  38. android:resource="@xml/searchable" />
  39. </activity>
  40. <activity android:name=".OtherActivity"></activity>
  41. <provider
  42. android:name="com.example.search.provider.MySuggestionProvider"
  43. android:authorities="com.example.search.provider.MySuggestionProvider" />
  44. </application>
  45.  
  46. </manifest>

  2.2 为某一个Activity配置搜索框

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

  1. <activity
  2. android:name="com.example.search.MainActivity"
  3. android:label="@string/app_name"
  4. android:launchMode="singleTop" >
  5. <intent-filter>
  6. <action android:name="android.intent.action.MAIN" />
  7. <category android:name="android.intent.category.LAUNCHER" />
  8. </intent-filter>
  9.  
  10. <!-- 在某个activity的内部,表示当前的activity可以调出搜索框, 指定要激活的 SearchableActivity -->
  11. <meta-data
  12. android:name="android.app.default_searchable"
  13. android:value=".SearchableActivity" />
  14. </activity>
  15.  
  16. <!-- 点击搜索结果要跳转到的activity -->
  17. <activity android:name=".SearchableActivity" >
  18. <intent-filter>
  19. <action android:name="android.intent.action.SEARCH" />
  20. </intent-filter>
  21. <meta-data
  22. android:name="android.app.searchable"
  23. android:resource="@xml/searchable" />
  24. </activity>

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

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

  1. @Override
  2. protected void onNewIntent(Intent intent) {
  3. setIntent(intent);
  4. handleIntent(intent);
  5. }
  6.  
  7. private void handleIntent(Intent intent) {if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
  8. String query = intent.getStringExtra(SearchManager.QUERY);
  9. doMySearch(query);
  10. }
  11. }
  12.  
  13. private void doMySearch(String query) {
  14. Toast.makeText(this, "res: "+query, Toast.LENGTH_SHORT).show();
  15. }

  配置文件

  1. <activity
  2. android:name="com.example.search.MainActivity"
  3. android:label="@string/app_name"
  4. android:launchMode="singleTop" >
  5. <intent-filter>
  6. <action android:name="android.intent.action.MAIN" />
  7. <category android:name="android.intent.category.LAUNCHER" />
  8. </intent-filter>
  9.  
  10. <intent-filter>
  11. <action android:name="android.intent.action.SEARCH" />
  12. </intent-filter>
  13.  
  14. <meta-data
  15. android:name="android.app.searchable"
  16. android:resource="@xml/searchable" />
  17. </activity>

3、创建provider

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

  1. public class MySuggestionProvider extends SearchRecentSuggestionsProvider {
  2. // AUTHORITY:它的值域searchable.xml中的searchSuggestAuthority一样
  3. public final static String AUTHORITY = "com.example.search.provider.MySuggestionProvider";
  4. public final static int MODE = DATABASE_MODE_QUERIES;
  5.  
  6. public MySuggestionProvider() {
  7. setupSuggestions(AUTHORITY, MODE);
  8. }
  9.  
  10. @Override
  11. public Cursor query(Uri uri, String[] projection, String selection,
  12. String[] selectionArgs, String sortOrder) {
  13. // 在搜索框中输入的值
  14. String query = selectionArgs[0];
  15.  
  16. Log.i("tag", query);
  17. Log.i("tag", uri.getLastPathSegment().toLowerCase());
  18.  
  19. return getSuggestions(query);
  20. }
  21.  
  22. private Cursor getSuggestions(String query) {
  23. String processedQuery = query == null ? "" : query.toLowerCase();
  24. List<Person> persons = DataSource.getInstance().getPersons(processedQuery);
  25. MatrixCursor cursor = new MatrixCursor(COLUMNS);
  26. long id = 0;
  27. for (Person person : persons) {
  28. cursor.addRow(columnValuesOfWord(id++, person));
  29. }
  30. return cursor;
  31. }
  32.  
  33. private Object[] columnValuesOfWord(long id, Person person) {
  34. return new Object[] { id, // _id
  35. person.name, // text1
  36. person.id, // text2
  37. person.name
  38.  
  39. };
  40. }
  41.  
  42. private static final String[] COLUMNS = { "_id",
  43. SearchManager.SUGGEST_COLUMN_TEXT_1,
  44. SearchManager.SUGGEST_COLUMN_TEXT_2,
  45. SearchManager.SUGGEST_COLUMN_QUERY
  46. // SearchManager.SUGGEST_COLUMN_INTENT_DATA,// 数据传递到intenter中
  47. };
  48.  
  49. }

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

Android学习笔记_79_ Android 使用 搜索框的更多相关文章

  1. Android学习笔记1 android adb启动失败问题 adb server is out of date. killing...

    下面是Android的学习笔记,原文地址. 我是使用adb devices出现如下红字错误, 使用第一种方法方法,结果关掉豌豆荚就可以了. android adb启动失败问题 adb server i ...

  2. Android学习笔记之Android Studio添加新的Activity

    1.创建Android项目工程:AndroidTest 创建过程可参考网上诸多教程. 2.添加新的Activity,步骤如下 a. 在layout文件夹上右键,New-Activity-相应Activ ...

  3. Android学习笔记之 android:collapseColumns ,android:shrinkColumns 和stretchColumns

    摘自:http://blog.csdn.net/sjf0115/article/details/7213565/ TableLayout是一个使用复杂的布局,最简单的用法就仅仅是拖拉控件做出个界面,但 ...

  4. android学习笔记45——android的数据存储和IO

    android的数据存储和IO SharedPreferences与Editor简介 SharedPreferences保存的数据主要是类似于配置信息格式的数据,因此其保存的数据主要是简单的类型的ke ...

  5. Android学习笔记之Android Studio下创建menu布局文件

    1.创建menu文件夹 Android Studio项目中如果没有menu文件夹,在res文件夹右键,new-Android resource directory: 则会弹出下图对话框,在Resour ...

  6. android学习笔记(9)android程序调试学习

    相应若水老师的第十四课 一,Log日志输出 Log.v(tag,message);        //verbose模式,打印最具体的日志  Log.d(tag,message);        // ...

  7. Android学习笔记(1)—Android Studio安装

    Android Studio 是一个全新的 Android 开发环境,基于IntelliJ IDEA. 类似 Eclipse ADT,Android Studio 提供了集成的 Android 开发工 ...

  8. Android学习笔记1——Android开发环境配置

    一.JDK配置 Android是基于Java进行开发的,首先需要在电脑上配置JDK(Java Development Kit).在http://www.androiddevtools.cn/下载对应系 ...

  9. Android学习笔记(36):Android的两种事件处理方式

    Android提供了两种事件处理的方式:基于回调的事件处理 和 基于监听的事件处理. 我们来说的easy理解一点: (1)基于回调的事件处理就是继承GUI组件,并重写该组件的事件处理方法.除了一些特定 ...

随机推荐

  1. 【mysql】mysql数据库安装

    今天一直在测功能,整理用例,所以没有去调项目,想到之前有小伙伴求助数据库安装,还远程了一番,所以,就整理一下,数据库在测试工作中还是挺重要的,不能本地测试改个数据都去找开发小哥哥吧,是不是不太好呢,妹 ...

  2. 一、hadoop安装与配置

    准备环境: 系统:centos6.5 64位 192.168.211.129   master 192.168.211.131   slave1   在两台服务器上都要配置ssh免密码登录 在192. ...

  3. [转]C# - JSON详解

    本文转自:http://www.cnblogs.com/QLJ1314/p/3862583.html 最近在做微信开发时用到了一些json的问题,就是把微信返回回来的一些json数据做一些处理,但是之 ...

  4. asp.net MVC3之AJAX实现(json)

    asp.net MVC3之AJAX实现(json)         分类:             Asp.net MVC              2011-08-10 13:55     2272 ...

  5. L1-002 打印沙漏 (20 分)

    L1-002 打印沙漏 (20 分) 方法:清晰思路,纸上写出实例,注意循环使用 本题要求你写个程序把给定的符号打印成沙漏的形状.例如给定17个“*”,要求按下列格式打印 ***** *** * ** ...

  6. oracle中时间戳转为Date类型的数据

    问题描述: 一个表中原本应该存放date类型的数据,但是不知道之前哪位大仙把两个字段的类型建成了NUMBER类型的了,这样在后台看时间肯定不方便.现在需要改成date类型,但是现在库中是有数据的,不能 ...

  7. js简单时分秒倒计时

    效果: javascript: <script type="text/javascript"> function countTime() { //获取当前时间 var ...

  8. flex布局帮助你快速实现布局

    flex布局可以帮我们快速布局一些区块,实现你想要的效果,不用再去float,position之类的.我们在布局网页的时候很多时候都是一些特殊布局,flex就能帮我快速去布局,不需要去定位. 任何一个 ...

  9. ES6新增的math,Number方法

    ES6新增的math,Number方法,下面总结了一些我觉得有用的 Nunber.isInteger()判断是否为整数,需要注意的是1,和1.0都会被认为是整数 console.log(Number. ...

  10. 02_ActiveMQ入门

    [ActiveMQ 入门HelloWorld例子] [启动ActiveMQ] 1.由于本人PC是64位的,选择在bin目录下的win64/activemq.bat启动. 2.启动成功后,访问http: ...