四、创建Searchable Activity
 
 
 
  searchable activity根据搜索关键字进行搜索,并显示搜索结果。
 
 
 
  当我们在search dialog or widget执行搜索的时候,系统就启动你的searchable activity ,并把搜索关键字用一个aciton为ACTION_SEARCH的Intent传给你的searchable activity. 你的searchable activity在Intent中通过extra的QUERY来提取搜索关键字,执行搜索并显示搜索结果.
 
 
 
  我们需要在AndroidManifest.xml文件中声明Searchable Activity,以便在search dialog or widget执行搜索的时候,系统启动该searchable activity并把搜索关键字传给它。
 
 
 
  4.1、声明searchable activity
 
 
 
  如何在
  AndroidManifest.xml
  文件中
  声明Searchable Activity
 
 
 
     
  1. 
  在activity的<intent-filter> 中添加一个可以接受action为ACTION_SEARCH的intent。
 
 
 
     
  2. 
  在<meta-data>中指明search dialog or widget的配置文件(即searchable.xml)
 
 
 
     比如,
  示例2:
 
 
 
    
   <application ... >
 
 
 
      <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>
 
 
 
      ...
 
 
 
  </application>
 
 
 
  <meta-data>
  必须包括
  android:name
  这个属性,而且其值必须为
  "android.app.searchable"
  ,
 
 
 
  还必须包括
  android:resource
  这个属性,它指定了我们的s
  earch dialog
  的
  配置文件
  。(示例2中指定是
  the res/xml/searchable.xml
  ).
 
 
 
  注意
  : 
  <intent-filter> 没有必要加入<category android:name="android.intent.category.DEFAULT" /> ,
 
 
 
  因为系统是通
  过
  component name
  把ACTION_SEARCH intent explicitly显示的传递给searchable activity的
  。
 
 
 
  4.2、执行搜索
 
 
 
  当你在manifest文件中,声明好了searchable activity,在你的searchable activity,就可以参照下面的3步执行搜索了。
 
 
 
  (1),
  提取搜索关键字
 
 
 
  (2),
  在你的数据中进行搜索
 
 
 
  (3),
  显示搜索结果
 
 
 
  一般来说,你的搜索结果需要要在ListView进行显示,所有你的searchable activity需要继承ListActivity。
 
 
 
  它包括了一个拥有单一ListView的layout,它为我们使用ListView提供了方便。
 
 
 
  4.2.1、提取搜索关键字
 
 
 
  当用户在search dialog or widget界面开始搜索的时候,系统将查找一个合适的searchable activity,并给它传送一个ACTION_SEARCH的intent,该intent把搜索关键字保存在extra的QUERY中。当activity的时候,我们必须检查保存在extra的QUERY中的搜索关键字,并提取它。
 
 
 
  比如,
  示例3:
 
 
 
  @Override
 
 
 
  public void onCreate(Bundle savedInstanceState) {
 
 
 
      super.onCreate(savedInstanceState);
 
 
 
      setContentView(R.layout.search);
 
 
 
      // Get the intent, verify the action and get the query
 
 
 
      Intent intent = getIntent();
 
 
 
      if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
 
 
 
        String query = intent.getStringExtra(SearchManager.QUERY);
 
 
 
        doMySearch(query);
 
 
 
      }
 
 
 
  }
 
 
 
  在Action为ACTION_SEARCH的intent中,extra的QUERY总是被包含。在示例3提取处理了搜索关键字,然后让doMySearch()函数在执行真正的搜索的。
 
 
 
  4.2.2、数据搜索
 
 
 
  数据的存储和搜索都是和你的程序相关的。你可以以各种方式进行数据的存储和搜索,它才是你的程序更需要关注的。 
 
 
 
  但是还是有
  几点需要注意的:
 
 
 
  (1),
  当你的数据存储在手机的数据库中时,执行full-text search (using FTS3, rather than a LIKE query)
 
 
 
  能提供在文本数据中得到更健壮且速度更快的search。
  在 sqlite.org 中可以得到FTS3的更多信息, 在 
 
 SQLiteDatabase 可以看到Android上的SQLite更多信息 . 可以在 Searchable Dictionary看到一个用FTS3实现搜索的示例。
 
  (2),
  如果的数据来自互联网,那么你的搜索将受制于用户的数据连接情况。这时我们就需要显示一个进度条,直到从网路返回搜索结果。
 
 
 
  . 在 
 
 android.net 可一看到更多的network APIs ,在 Creating a Progress Dialog 可以到看到如何显示一个进度条。
 
  如果想让的数据和搜索变得透明,那么我建议你用一个Adapter返回搜索结果。这种方式,你更容易在ListView中显示搜索结果。如果你的数据在自于数据库,那么通过CursorAdapter向ListView提供搜索结果,如果你的数据来自于其他方式,可以扩展一个BaseAdapter来使用。
 
 
 
  4.2.3、结果显示
 
 
 
  正如上面讨论的一样,显示搜索结果建议使用的UI是ListView,所以你的searchable activity最好继承于ListActivity,然后是使用setListAdapter()来设置和搜索结果绑定了的Adapter。这样你的搜索结果就可以显示在ListView中了。
 
 
 
  你可以参考 Searchable Dictionary 示例,它展示了怎么进行数据库查询,怎么使用Adapter向ListView提供搜索结果。
 
 
  
                   
                   
                   
                   
                             本文详细介绍了如何在Android中创建SearchableActivity,包括声明SearchableActivity的方法、执行搜索的过程、数据搜索的策略以及结果显示的方式。重点强调了如何在AndroidManifest.xml文件中声明SearchableActivity,以及如何在SearchableActivity中提取搜索关键字、执行数据搜索并显示搜索结果。
本文详细介绍了如何在Android中创建SearchableActivity,包括声明SearchableActivity的方法、执行搜索的过程、数据搜索的策略以及结果显示的方式。重点强调了如何在AndroidManifest.xml文件中声明SearchableActivity,以及如何在SearchableActivity中提取搜索关键字、执行数据搜索并显示搜索结果。
           
       
           
                 
                 
                 
                 
                 
                
               
                 
                 
                 
                 
                
               
                 
                 扫一扫
扫一扫
                     
              
             
                   3493
					3493
					
 被折叠的  条评论
		 为什么被折叠?
被折叠的  条评论
		 为什么被折叠?
		 
		  到【灌水乐园】发言
到【灌水乐园】发言                                
		 
		 
    
   
    
   
             
            


 
            