Android学习笔记_79_ Android 使用 搜索框
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
Android学习笔记_79_ Android 使用 搜索框的更多相关文章
- Android学习笔记1 android adb启动失败问题 adb server is out of date. killing...
下面是Android的学习笔记,原文地址. 我是使用adb devices出现如下红字错误, 使用第一种方法方法,结果关掉豌豆荚就可以了. android adb启动失败问题 adb server i ...
- Android学习笔记之Android Studio添加新的Activity
1.创建Android项目工程:AndroidTest 创建过程可参考网上诸多教程. 2.添加新的Activity,步骤如下 a. 在layout文件夹上右键,New-Activity-相应Activ ...
- Android学习笔记之 android:collapseColumns ,android:shrinkColumns 和stretchColumns
摘自:http://blog.csdn.net/sjf0115/article/details/7213565/ TableLayout是一个使用复杂的布局,最简单的用法就仅仅是拖拉控件做出个界面,但 ...
- android学习笔记45——android的数据存储和IO
android的数据存储和IO SharedPreferences与Editor简介 SharedPreferences保存的数据主要是类似于配置信息格式的数据,因此其保存的数据主要是简单的类型的ke ...
- Android学习笔记之Android Studio下创建menu布局文件
1.创建menu文件夹 Android Studio项目中如果没有menu文件夹,在res文件夹右键,new-Android resource directory: 则会弹出下图对话框,在Resour ...
- android学习笔记(9)android程序调试学习
相应若水老师的第十四课 一,Log日志输出 Log.v(tag,message); //verbose模式,打印最具体的日志 Log.d(tag,message); // ...
- Android学习笔记(1)—Android Studio安装
Android Studio 是一个全新的 Android 开发环境,基于IntelliJ IDEA. 类似 Eclipse ADT,Android Studio 提供了集成的 Android 开发工 ...
- Android学习笔记1——Android开发环境配置
一.JDK配置 Android是基于Java进行开发的,首先需要在电脑上配置JDK(Java Development Kit).在http://www.androiddevtools.cn/下载对应系 ...
- Android学习笔记(36):Android的两种事件处理方式
Android提供了两种事件处理的方式:基于回调的事件处理 和 基于监听的事件处理. 我们来说的easy理解一点: (1)基于回调的事件处理就是继承GUI组件,并重写该组件的事件处理方法.除了一些特定 ...
随机推荐
- 【mysql】mysql数据库安装
今天一直在测功能,整理用例,所以没有去调项目,想到之前有小伙伴求助数据库安装,还远程了一番,所以,就整理一下,数据库在测试工作中还是挺重要的,不能本地测试改个数据都去找开发小哥哥吧,是不是不太好呢,妹 ...
- 一、hadoop安装与配置
准备环境: 系统:centos6.5 64位 192.168.211.129 master 192.168.211.131 slave1 在两台服务器上都要配置ssh免密码登录 在192. ...
- [转]C# - JSON详解
本文转自:http://www.cnblogs.com/QLJ1314/p/3862583.html 最近在做微信开发时用到了一些json的问题,就是把微信返回回来的一些json数据做一些处理,但是之 ...
- asp.net MVC3之AJAX实现(json)
asp.net MVC3之AJAX实现(json) 分类: Asp.net MVC 2011-08-10 13:55 2272 ...
- L1-002 打印沙漏 (20 分)
L1-002 打印沙漏 (20 分) 方法:清晰思路,纸上写出实例,注意循环使用 本题要求你写个程序把给定的符号打印成沙漏的形状.例如给定17个“*”,要求按下列格式打印 ***** *** * ** ...
- oracle中时间戳转为Date类型的数据
问题描述: 一个表中原本应该存放date类型的数据,但是不知道之前哪位大仙把两个字段的类型建成了NUMBER类型的了,这样在后台看时间肯定不方便.现在需要改成date类型,但是现在库中是有数据的,不能 ...
- js简单时分秒倒计时
效果: javascript: <script type="text/javascript"> function countTime() { //获取当前时间 var ...
- flex布局帮助你快速实现布局
flex布局可以帮我们快速布局一些区块,实现你想要的效果,不用再去float,position之类的.我们在布局网页的时候很多时候都是一些特殊布局,flex就能帮我快速去布局,不需要去定位. 任何一个 ...
- ES6新增的math,Number方法
ES6新增的math,Number方法,下面总结了一些我觉得有用的 Nunber.isInteger()判断是否为整数,需要注意的是1,和1.0都会被认为是整数 console.log(Number. ...
- 02_ActiveMQ入门
[ActiveMQ 入门HelloWorld例子] [启动ActiveMQ] 1.由于本人PC是64位的,选择在bin目录下的win64/activemq.bat启动. 2.启动成功后,访问http: ...