我完全陷入困境,花了几个小时阅读可能的解决方案。 根本无法启动我的搜索活动。
我有一个主要活动,我想从中搜索按钮开始搜索活动:
档案MainApp.java
public class MainApp extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mainapplayout);
}
public boolean onCreateOptionsMenu(Menu m){
getMenuInflater().inflate(R.menu.mainappmenu,m);
return true;
}
public boolean onOptionsItemSelected(MenuItem m) {
if(m.getItemId()==R.id.menu_search){
return onSearchRequested(); // THIS IS CALLED, AND RETURNS TRUE
}else return false;
}
}
无论是按UI按钮,还是硬件搜索键,都不会调用搜索。
绝对会调用onSearchRequested()
,并返回true
。
档案AndroidManifest.xml
:
<?xml version="1.0" encoding="utf-8"?>
<manifest package="org.homphysiology.lists"
android:versionCode="1" android:versionName="1.0"
xmlns:android="http://schemas.android.com/apk/res/android">
<uses-sdk android:minSdkVersion="8" />
<application
android:name="org.homphysiology.lists.MainApp"
****REMOVED THIS LINE NOW, thanks arju, still not working tho
android:icon="@drawable/ic_launcher">
<activity android:name="org.homphysiology.lists.MainApp">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data
android:name="android.app.default_searchable"
android:value="org.homphysiology.lists.SearchActivity"
/>
</activity>
<activity android:name="org.homphysiology.lists.SearchActivity">
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
<category android:name="android.intent.category.DEFAULT" />
****REMOVED THIS LINE NOW, thanks tushar, still not working tho
</intent-filter>
<meta-data
android:name="android.app.searchable"
android:resource="@xml/searchable"
/>
</activity>
</application>
</manifest>
我有以下内容:
档案res/xml/searchable.xml
:
<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schamas.android.com/apk/res/android"
android:label="@string/search_label"
android:hint="@string/search_hint"
/>
这些字符串位于/res/values/strings.xml
。
搜索活动本身很简单,但从未创建 - 我在构造函数中有一个断点:
档案SearchActivity.java
:
public class SearchActivity extends ListActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setListAdapter(...)
}
}
有人能在这里发现任何问题吗? [在Eclipse中编译Juno 4.2.1,SDK 21.0.1,测试HTC欲望Z] 感谢...
((SearchManager)getSystemService(Context.SEARCH_SERVICE))
.getSearchableInfo(getComponentName())
返回null
。也许这只是因为我的SearchActivity
未正确注册的事实......
修改@ arju的建议:我可以使用
“手动”启动搜索活动boolean onOptionsItemSelected(MenuItem m){
startActivity(new Intent(this,SearchActivity.class));
return true;
}
但当然,这不适用于硬件按钮,而且它不会显示系统搜索对话框。
我还尝试设置整个应用程序的搜索元数据,而不是主要活动:
<manifest>
<application>
<activity ...MainApp... > ... </activity>
<activity ...SearchActivity... > ... </activity>
<meta-data
android:name="android.app.default_searchable"
android:value="org.homphysiology.lists.SearchActivity"
/>
</application>
</manifest>
同样的问题!搜索活动永远不会被实例化。
答案 0 :(得分:1)
试试这个
Intent i = new Intent(“android.intent.action.SEARCH”);
startActivity(ⅰ);
答案 1 :(得分:1)
注意:&lt;意图滤光器&gt;不需要&lt;类别&GT;使用DEFAULT值(通常在&lt; activity&gt;元素中看到),因为系统使用其组件名称将ACTION_SEARCH意图明确地传递给您的可搜索活动。
编辑:
就是这样:
<searchable xmlns:android="http://schamas.android.com/apk/res/android"
应该是:
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
注意schamas
vs schemas
:)