2012-03-18 110 views
0

我需要在我的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

在活動時加載該方法'@Override public boolean onSearchRequested(){ return super.onSearchRequested(); }' – 2012-03-18 12:04:02

回答

0

(這只是有點太長的評論。)

logcat說什麼?失敗的意圖調用應該有一個堆棧跟蹤。另外,我建議你仔細閱讀docs。例如,您無需截取搜索按鈕事件,因爲它默認打開搜索對話框。你還應該檢查你是否有searchable configuration。如果您想從其他活動開始搜索對話框,請確保您的活動聲明中有this markup

+0

我知道搜索按鈕會默認打開搜索,但它會在** current **活動中執行,這不是我想要做的。我想要創建新的活動。至於_android.app.default_searchable_標籤,我確實有(我編輯了我的原始問題並添加了這些信息)。 – powell 2012-03-18 12:08:35

+0

LogCat沒有說任何事 - SearchActivity剛剛啓動,但沒有搜索對話框。我必須再次按下搜索按鈕才能顯示搜索對話框。 – powell 2012-03-18 12:14:46

相關問題