微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在Android中搜寻

我有一个想要在其中添加搜索功能的应用程序,我试图按照developer.android中的说明实施,但是当我在模拟器中单击搜索时,活动没有开始,这是什么问题?

> 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
 }
}

> 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>

> 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上了解到它,如何让我的数据库更好地拥有FTS

附注:我是初学者,因此如果有菜鸟错误,请耐心等待,不要跳过任何步骤.

解决方法:

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

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>.同样需要在活动之外定义

<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.进行全文搜索并非总是必要的,它完全取决于您希望如何向db查询结果,您将考虑哪些字段以及它们与应用程序的主要目的如何相关,

更多参考

> Sqlite.org(这是《 HOW and What》的最广泛的文章,
FTS).
> blog.andresteingress(带有Android教程的FTS).
> O Reilly.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐