如何在新活动中启动搜索对话框?

时间:2012-03-18 11:39:45

标签: android android-intent

我需要在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,但我必须再次按“搜索”按钮才能看到“搜索”对话框。 我错过了什么?

1 个答案:

答案 0 :(得分:0)

(评论时间太长了。)

logcat说什么?失败的意图调用应该有一个堆栈跟踪。另外,我建议你仔细阅读docs。例如,您无需截取搜索按钮事件,因为它默认情况下会打开搜索对话框。您还应该检查是否有searchable configuration。如果您想从其他活动开始搜索对话框,请确保您的活动声明中有this markup