注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

民主与科学

独立之人格,自由之思想

 
 
 

日志

 
 

Searchable之Recent Query Suggestions(上)  

2011-05-13 12:59:47|  分类: 开发专题 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
原文地址:http://developer.android.com/guide/topics/search/adding-recent-query-suggestions.html
当你使用search dialog or search widget的时候, 你可以提供基于recent search queries的provide search suggestions. 
比如所用户以前搜索过"puppies," 当用户开始输入和他一样的时候,这个query将出现在suggestion中.
图一就是一个在search dialog中使用recent query suggestions的界面图。
图一:
Recent Query Suggestions(上) - hubingforever - 民主与科学
 
在开始实现recent search queries之前,你需要在你的程序中实现search dialog or a search widget基本的搜索 。
关于他们的更多内存请参照《Searchable》系列
基本
Recent query suggestions仅仅是保存搜索过的searches。当用户选择了一个suggestions的时候,你的searchable activity将收到一个把suggestion作为搜索关键字的ACTION_SEARCH intent,其实你的searchable activity曾经也处理过它。
为了提供recent queries suggestions, 你需要以下几步:
    A、 实现一个searchable activity
    B、创建一个继承于SearchRecentSuggestionsProvider的content provider类,并在你的manifest中声明它。
    C、在searchable配置文件中配置提供search suggestions的content provider.
    D、当每次执行搜索的时候,把你的搜索关键字保存你的content provider中
当系统显示search dialog或search widget的时候,就会在它们下面显示 search suggestions。你所需要做的就是为系统提供提取suggestions的source。
一旦系统识别到了你的searchable activity并且你提供的search suggestions, 当用户键入查询语句的时候,将执行下面的流程:
1.系统取得用户当前已经输入的搜索关键字,并在你的content provider(suggestions)执行查询
2.你的content provider用Cursor返回一个和搜索关键字相匹配的所有suggestions
3.系统以列表的形式显示由Cursor提供的suggestions
一旦recent query suggestions被显示, 下面的几种情况之一将发生:
A,如果用户继续键入搜索关键词,或以任何方式改变了搜索关键词,上面的行为将重复,suggestion list也将更新
B,如果用户执行搜索的话,suggestions将被忽略,用户输入的搜索关键词将通过ACTION_SEARCH intent传递到你的searchable activity
C,如果用户选择了一个suggestion, 将使用这个suggested text做为查询关键字从ACTION_SEARCH intent传递到你searchable activity
你的继承自SearchRecentSuggestionsProvider的content provider将自动的做上面的工作,所以实事上你只有很少的代码需要编写。
创建Content Provider
你用于recent query suggestions的content provider必须是一个SearchRecentSuggestionsProvider的实现。实际上它已经为你提供了所有的东西。你所需要的就是重写构造函数来加上一行代码
比如下面就是一个recent query suggestions的content provider的完整实现。
示例1
public class MySuggestionProvider extends SearchRecentSuggestionsProvider {
    public final static String AUTHORITY = "com.example.MySuggestionProvider";
   
public final static int MODE = DATABASE_MODE_QUERIES;
   
public MySuggestionProvider() {
       
setupSuggestions
(AUTHORITY, MODE);
   
}
}
调用setupSuggestions() 需要两个参数,一个是搜索的授权名,另一个是数据库的模式。搜索授权必须是unique的字符串,但是一般最好的就是使用你的content provider的qualified name(包名加上provider的类名; 比如 "com.example.MySuggestionProvider"). 数据库模式必须包含DATABASE_MODE_QUERIES,也可以加上可选项DATABASE_MODE_2LINES它将在suggestions表的基础上再加入一行,它允许你为每个suggestion再添加一行文本。比如,你想让没suggestion都有2行的话,可以这样:
示例2:
public final static int MODE = DATABASE_MODE_QUERIES | DATABASE_MODE_2LINES;
注意你在manifest为该content provide声明的授权必须和setupSuggestions(AUTHORITY, MODE);中声明的授权一样。
比如:示例2:
<application>
   
<provider android:name=".MySuggestionProvider"
             
android:authorities="com.example.MySuggestionProvider" />
    ...
</application>
  评论这张
 
阅读(633)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017