我有一个想要在其中添加搜索功能的应用程序,我试图按照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.查看grokkingandroid和edumobile的教程,它们对我的问题没有帮助.
3.花时间在chat.stackoverflow上问人
问题/问题
1.好吧,我有doSearch()方法,但是如何精确地触发查询以及如何显示db的结果(以一个小db来显示示例,如何尽可能准确地显示结果).
3.在设计搜索时要牢记的一点是,除了developer.android内容外,网站上很多时候都没有透露其他细节.
4.如何执行全文搜索,我在developer.android上了解到它,如何让我的数据库更好地拥有FTS
附注:我是初学者,因此如果有菜鸟错误,请耐心等待,不要跳过任何步骤.
解决方法:
因此,搜索是决定您的应用程序实际可用性的关键因素,并提供必要的用户增强功能
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.