【发布时间】:2013-10-17 08:54:53
【问题描述】:
我是 android 新手,我正在使用与搜索相关的功能。阅读教程后,我有一些问题:
1 SearchableActivity 在应用程序中是否唯一?
设置搜索功能似乎需要 3 个步骤(来自 android 开发者指南):
1) 创建SearchableActivity 以接收搜索关键字。
2) 使SearchableActivity 接受 ACTION_SEARCH 意图
3) 在元素中指定要使用的可搜索配置。
那我想知道是不是所有搜索相关的工作都会委托给SearchableActivity?
假设我有两个MainActivity 和MainActivityTwo,它们都在操作栏中创建了一个SearchView。
AndroidMinefset.xml:
<activity android:name="com.app.activity.MainActivityTwo" />
<activity android:name="com.app.activity.MainActivity" />
<activity android:name="com.app.activity.SearchableActivity"
android:launchMode="singleTop" >
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
</intent-filter>
<meta-data
android:name="android.app.searchable"
android:resource="@xml/searchable" />
</activity>
xml/search.xml:
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
android:hint="@string/search_hint"
android:label="@string/app_name" >
</searchable>
并将搜索配置(serchableInfo)注册到SerchView:
.MainActivity
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.u_action_menu_map, menu);
MenuItem searchItem = menu.findItem(R.id.action_search);
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
return super.onCreateOptionsMenu(menu);
}
这个不行,好像没有与当前Activity绑定的serchableInfo(MainActivity)。
连我都改成这样了:
searchView.setSearchableInfo(searchManager.getSearchableInfo(new ComponentName("com.app.activity", "SearchableActivity")));
还是找不到 searchableInfo。
我将搜索相关配置添加到MainActivity后:
<activity android:name="com.app.activity.MainActivityTwo" />
<activity android:name="com.app.activity.SearchableActivity" />
<activity android:name="com.app.activity.MainActivity"
android:launchMode="singleTop" >
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
</intent-filter>
<meta-data
android:name="android.app.searchable"
android:resource="@xml/searchable" />
</activity>
这行得通。见鬼。
我一直以为Activity提供Search UI和Activity处理输入是不一样的,但是经过我的测试,他们似乎是同一个Activity,并不是说用户输入是提交给Activity本身的,但是为什么要使用 **ing 意图来传输输入数据呢?
2 搜索提交
搜索对话框的右侧有一个搜索提交按钮:
但是SearchView里面什么都没有,那么如何在SearchView中提交搜索:
【问题讨论】:
-
搜索按钮在键盘的右下角
标签: android android-activity android-search