Android搜索建议(搜索联想)

Android的搜索建议,简言之,就是说当用户输入某一个关键词后,系统自动给出几个含有相近关键词的搜索建议。

效果图如下:

MainActivity.java

package zhangphil.search;

import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.provider.SearchRecentSuggestions;
import android.view.View;
import android.widget.Button;

public class MainActivity extends ActionBarActivity {

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		Button search = (Button) findViewById(R.id.search);
		search.setOnClickListener(new View.OnClickListener() {

			@Override
			public void onClick(View v) {
				// 发起搜索
				search();
			}
		});

		Button clear = (Button) findViewById(R.id.clear);
		clear.setOnClickListener(new View.OnClickListener() {

			@Override
			public void onClick(View v) {
				clear();
			}
		});
	}

	private void search() {
		// 向Android系统发起搜索请求。
		this.onSearchRequested();
	}

	// onSearchRequested()方法可以重载 ,也可以不用重载。取决于是否有更多参数或数据传递给下一步操作。
	// 通常代码运行逻辑需要传递更多数据给下一个动作时候,则可以重载此方法以完成更多数据的传递。
	// 如果不重载,也可以。Android系统会启动默认的搜索框。(在UI的上方)
	@Override
	public boolean onSearchRequested() {
		Bundle bundle = new Bundle();
		bundle.putString("some key", "some value");

		this.startSearch("输入搜索的关键词"/** 初始化搜索框中的提示词 */
		, true, bundle, false /** 此处若为true,则将启动手机上的全局设置的那个搜索,比如Google搜索 */
		);

		return true;
	}

	// 清除全部历史搜索记录
	private void clear() {
		SearchRecentSuggestions suggestions = new SearchRecentSuggestions(this,
				ZhangPhilSuggestionProvider.AUTHORITY,
				ZhangPhilSuggestionProvider.MODE);
		// 出于用户隐私的考虑,给APP提供清除所有用户搜索历史记录的选项。
		suggestions.clearHistory();
	}
}

onSearchRequested将触发Android系统自动弹出搜索框。MainActivity需要的布局文件activity_main.xml很简单,两个按钮,一个触发搜索事件,一个触发清除搜索历史记录动作:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <Button
        android:id="@+id/search"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/search" />

    <Button
        android:id="@+id/clear"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/clear" />

</LinearLayout>

AndroidManifest.xml的内容:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="zhangphil.search"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="22" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>

            <meta-data
                android:name="android.app.default_searchable"
                android:value=".SearchActivity" />
        </activity>

        <activity
            android:name=".SearchActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.SEARCH" />
            </intent-filter>

            <meta-data
                android:name="android.app.searchable"
                android:resource="@xml/searchable" />
        </activity>

        <provider
            android:name=".ZhangPhilSuggestionProvider"
            android:authorities="ZhangPhil_AUTHORITY" />
    </application>

</manifest>

SearchActivity.java文件:

package zhangphil.search;

import android.app.Activity;
import android.app.SearchManager;
import android.content.Intent;
import android.os.Bundle;
import android.provider.SearchRecentSuggestions;
import android.widget.Toast;

public class SearchActivity extends Activity {

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		Intent intent = getIntent();
		if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
			// 存关键词
			saveMyRecentQuery(intent);
		}
	}

	private void saveMyRecentQuery(Intent intent) {
		// 把搜索的关键词保存到Android系统的自带的数据库中。
		// 如无必要定制,则此过程可以使用标准、通用的方法。
		String query = intent.getStringExtra(SearchManager.QUERY);

		SearchRecentSuggestions suggestions = new SearchRecentSuggestions(this,
				ZhangPhilSuggestionProvider.AUTHORITY,
				ZhangPhilSuggestionProvider.MODE);
		suggestions.saveRecentQuery(query, null);

		Toast.makeText(this, "搜索关键词:" + query ,Toast.LENGTH_LONG).show();
	}
}

ZhangPhilSuggestionProvider.java

package zhangphil.search;

import android.content.SearchRecentSuggestionsProvider;

public class ZhangPhilSuggestionProvider extends
		SearchRecentSuggestionsProvider {
	// 可随意定义一个可区别的字符串,但注意全局的唯一相同引用。
	public final static String AUTHORITY = "ZhangPhil_AUTHORITY";

	public final static int MODE = DATABASE_MODE_QUERIES;

	public ZhangPhilSuggestionProvider() {
		setupSuggestions(AUTHORITY, MODE);
	}
}

searchable.xml

<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
    android:label="@string/app_name"
    android:hint="@string/search_hint"
    android:searchSuggestAuthority="ZhangPhil_AUTHORITY"
    android:searchSuggestSelection=" ?">
</searchable>

完整的项目全部代码文件我已经上传到CSDN,可以点击下载链接下载到本地,解压后导入到Eclipse运行演示。CSDN下载链接:

http://download.csdn.net/detail/zhangphil/8603509



时间: 2024-10-11 01:48:01

Android搜索建议(搜索联想)的相关文章

【转】为Android应用添加搜索功能

为Android应用添加搜索功能 为Android应用增加搜索功能:增加搜索建议

一个简单的ExtJS搜索建议框

封装的是一个Ext4.2的组件,继承并兼容于Ext的ComboBox. 实现原理非常easy,在 combo 中监听 keyup 事件就可以. 搜索建议的Combo.基本上全然兼容, 使用方式与Combo下拉框一样. 须要后台程序依据keyword进行搜索建议. 源代码例如以下: // 搜索建议框,使用时请适当改动包名 Ext.define("CNC.view.SearchComboBox",{ extend: "Ext.form.field.ComboBox",

AJAX实现google搜索建议实战

搜索建议实战的目标是为了输入搜索内容,动态的进行匹配,效果图如下: 整体思路: 在客户端搜索框中触发onkeyup事件, 随时向PHP服务器请求当前输入框中的内容, PHP服务器获取到keywords后,向数据库中模糊查找相关的数据 编写顺序为: SQL---->PHP------>HTML----->CSS----->JavaScript 具体实现: 第一步:创建一个数据库(fanfan.sql),向books表中插入若干条记录 1 SET NAMES UTF8; 2 DROP

bootstrap suggest搜索建议插件

近日因工作需要看了下此插件. 首先下载bootstrap js包.添加此插件的引用.注意css样式要引用,不能忘记. 前台页面代码,因为楼主做的是选项卡切换查询不同的结果. <tr> <th style="background: #fff;" width="30%">类型:</th> <td width="70%"> <select class="selectpicker show-

【Android】实现搜索的自动补全功能

[Android]实现搜索的自动补全功能 功能分类:特效 支持平台:Android 运行环境:Eclipse 开发语言:Java 开发工具:Eclipse 源码大小:815.56KB 下载地址:http://www.dwz.cn/x9bUV 源码简介 利用Sqlite模糊查询实现搜索框的自动补全效果(支持字母+汉字补全)欢迎各位小伙伴提供更好的实现思路 运行截图

学习笔记 Android.mk 自动搜索

最近被Android.mk这东西折腾的一晚,这里记录一下. ios就省心多了,不用管那么多,xcode自己解决了. 文本工具:MACVIM(文本编辑工具 非常好用 能清楚分清tab 和空格,以免编写.mk时出错) 这个文件是向编译器描述源代码文件,便于它去解析. 以下是cocos2dx-3.2新建项目时生成的Android.mk文件 基本语法: "#" 注释 ":="  赋值 "+="  追加 "$"    引用某变量的值 #

Google 谷歌网页搜索, 学术搜索

Google 谷歌网页搜索, 学术搜索 1. 网页搜索引擎-Google * https://letsgg.tk/ * https://google.kfd.me/ 谷歌搜索镜像:  http://dir.scmor.com/google/ 2. 学术搜索引擎,包括谷歌,百度,微软...等  --网址: http://guog.org/ 3. Google Github 代码搜索 谷歌和GitHub宣布,谷歌BigQuery现在为GitHub上280多万个托管开源项目提供了一个完整的快照.这让用

记忆化搜索(搜索+dp思想)

一:简介 (1)记忆化搜索 即 搜索+动态规划数组记录上一层计算结果,避免过多的重复计算 算法上依然是搜索的流程,但是搜索到的一些解用动态规划的那种思想和模式作一些保存:一般说来,动态规划总要遍历所有的状态,而搜索可以排除一些无效状态.更重要的是搜索还可以剪枝,可能剪去大量不必要的状态,因此在空间开销上往往比动态规划要低很多. 记忆化算法在求解的时候还是按着自顶向下的顺序,但是每求解一个状态,就将它的解保存下来,以后再次遇到这个状态的时候,就不必重新求解了. 这种方法综合了搜索和动态规划两方面的

创建二叉树 树的深度搜索 广度搜索

树的深度搜索 与树的前序遍历同理 根节点->左孩子->右孩子  树的广度搜索 与树的层次遍历同理 一层一层遍历内容 深度搜索 采用stack的适配器 先进后出原则  而广度搜索采用的queue适配器 先进先出原则 二者正好满足 搜索需求 简要代码如下: #include <iostream> #include <stack> #include <queue> #include <malloc.h> using namespace std; typ