2

我有一个应用程序,我希望在其中添加搜索功能,我正在尝试按照中的说明实现,developer.android但是当我在模拟器中单击搜索时,活动没有启动,有什么问题?

  1. SearchActivity.java

    public class SearchActivity extends ListActivity 
    {
      public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
       handleIntent(getIntent());
    }
    
     @Override
     public void onNewIntent(Intent intent) {
       super.onNewIntent(intent);
       setIntent(intent);
       handleIntent(intent);
     }
    
     public void onListItemClick(ListView l,
       View v, int position, long id) {
        // call detail activity for clicked entry
     }
    
     private void handleIntent(Intent intent) {
      if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
      String query =intent.getStringExtra(SearchManager.QUERY);
       doSearch(query);
     }
    }
      private void doSearch(String queryStr) {
        // get a Cursor, prepare the ListAdapter
        // and set it
     }
    }
    
  2. xml/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/srchHint"
        android:inputType="textCapCharacters">
    </searchable>
    
  3. AndroidManifest.xml(下面的代码不显示其他活动)

    <application>
         <!-- other actvities -->
          <activity android:label="@string/app_name" android:launchMode="singleTop" 
                 android:name=".SearchActivity">
            <intent-filter>
                <action android:name="android.intent.action.SEARCH" />
          </intent-filter>
            <meta-data android:name="android.app.searchable" android:resource="@xml/searchable" />
         </activity>
    </application>
    

已经尝试过的事情:

1.在 StackOverflow 上查看类似的问题及其解决方案

2.看看grokkingandroidedumobile的教程,它们对我的问题没有帮助。

3.花时间在 chat.stackoverflow 上询问人们

问题/疑问

1.好的,我有doSearch()方法,但是如何准确地触发查询以及如何显示来自 db 的结果(以一个小 db 显示示例,如果可以的话),如何填充结果。

2.当我在模拟器中点击搜索时,搜索活动没有启动。

3.具体要记住什么,在设计搜索时除了这些developer.android东西,其他很多时候网站没有告诉的细节。

4.如何执行全文搜索,我在 上阅读过developer.android,如何让我的 db 能够拥有 FTS

PS:我是学习android的新手,所以如果有菜鸟的错误,请多多包涵,不要跳过步骤。

4

1 回答 1

0

因此,搜索是决定应用程序实际可用性的关键因素,并提供必要的用户增强功能

1.这是处理搜索最简单的方法之一

private void handleIntent(Intent intent) { 
      if (Intent.ACTION_SEARCH.equals(intent.getAction())) { 
         String query = 
               intent.getStringExtra(SearchManager.QUERY); 
         doSearch(query); 
      } 
   }    

   private void doSearch(String queryStr) 
       { 
       // get a Cursor/ArrayList, prepare the ListAdapter
       // and set it
       //helper.getSearchRecords(queryStr);//helper is a SQLiteOpenHelper Object
       //set it to adapter or get return result and proceed as you wish
       //personally i prefer ArrayAdapter
       ListView lstResult=(ListView)findViewById(R.id.lstVwResult);
       lstResult.setAdapter(null);
    SearchAdapter adapter=new SearchAdapter(getApplicationContext(), R.id.txvPersonId, helper.getSearchRecords(queryStr));
        lstResult.setAdapter(adapter);
   } 

2. SearchActivity 没有启动的原因也是<meta-data>需要在activity之外定义的,像这样

<application>
<activity android:label="@string/app_name" android:launchMode="singleTop" 
                 android:name=".SearchActivity">
            <intent-filter>
                <action android:name="android.intent.action.SEARCH" />
            </intent-filter>
            <meta-data android:name="android.app.searchable"  android:resource="@xml/searchable" />
</activity>

<!--define metadata outside activity in application tag-->
<meta-data android:name="android.app.default_searchable" android:value=".SearchActivity" />

3.要记住的关键事项之一,为什么要向应用程序添加搜索功能,它是联系人应用程序,单击检索结果会显示特定联系人的更多详细信息,但对于餐厅应用程序,它将显示详细信息在餐厅详细信息的地方,作为开发人员,您应该开发它来满足用户需求并增强用户体验。

4.对于拥有Full-Text Search,并不总是必要的,这完全取决于您希望如何向数据库查询结果,您将考虑哪些字段以及它们与您的应用程序的主要目的有何相关性,

更多参考

于 2013-02-19T02:16:06.520 回答