我需要在Android应用程序中实现搜索功能。我希望已经显示标准搜索对话框的“搜索”硬件按钮启动新活动。我想我可以手动完成,但也许有一种方法可以使用标准的搜索对话框来完成这个工作吗?
以下是我的工作:
在MainActivity中,我劫持了搜索按钮,如下所示:
public boolean onKeyDown(int KeyCode, KeyEvent event) {
if (KeyCode==KeyEvent.KEYCODE_SEARCH && event.getRepeatCount() == 0){
Intent i = new Intent(Month.this, SearchActivity.class);
i.setAction("android.intent.action.SEARCH");
startActivity(i);
return true;
}
return super.onKeyDown(KeyCode, event);
}
在Android Manifest.xml中,在SearchActivity部分中我有:
<activity android:name=".SearchActivity"
android:screenOrientation="portrait"
android:launchMode="singleTop"
android:configChanges="keyboardHidden|orientation">
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<meta-data android:name="android.app.searchable"
android:resource="@xml/searchable"/>
</activity>
在MainActivity部分:
<activity android:name=".MainActivity"
android:screenOrientation="portrait"
android:configChanges="keyboardHidden|orientation">
<meta-data android:name="android.app.default_searchable"
android:value=".SearchActivity" />
</activity>
我假设,将 android.intent.action.SEARCH 发送到SearchActivity应该会打开“搜索”对话框。但它不会......显示SearchActivity,但我必须再次按“搜索”按钮才能看到“搜索”对话框。 我错过了什么?
答案 0 :(得分:0)
(评论时间太长了。)
logcat说什么?失败的意图调用应该有一个堆栈跟踪。另外,我建议你仔细阅读docs。例如,您无需截取搜索按钮事件,因为它默认情况下会打开搜索对话框。您还应该检查是否有searchable configuration。如果您想从其他活动开始搜索对话框,请确保您的活动声明中有this markup。