博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android搜索建议(搜索联想)
阅读量:7166 次
发布时间:2019-06-29

本文共 3536 字,大约阅读时间需要 11 分钟。

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很简单,两个按钮,一个触发搜索事件,一个触发清除搜索历史记录动作:

AndroidManifest.xml的内容:

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

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


你可能感兴趣的文章
Linux装机简介
查看>>
raid0、raid1、raid5、raid10
查看>>
Crypto-RSA-1
查看>>
如何学习深度学习?
查看>>
dtree--JS树形控件【转】
查看>>
AI芯片的厂商竞争激烈,计算力将会发展如何?
查看>>
我的友情链接
查看>>
Linux下的 MySQL安装与使用
查看>>
ENGINEER 003:配置IPv6地址
查看>>
Linux之LAMP架构搭建配置
查看>>
MS SQL Server 学习⑵
查看>>
电子商务行业如何应对互联网安全?
查看>>
Linux下Oracle备份与数据迁移
查看>>
Yii2 —— 实现自己的iCheck资源包
查看>>
DELL iDRAC服务器远程控制设置
查看>>
用Google Analytics跟踪JavaScript Errors (译)
查看>>
Javascript在页面加载时的执行顺序(转载)
查看>>
JAVA io流 文件流 字节流 字符流 过滤流 缓冲流
查看>>
公司网络搭建及×××到公司配置
查看>>
thinkphp-union
查看>>