2010-12-16 4 views
8

Я пытаюсь реализовать диалог поиска, и я не могу отобразить поиск из Activity.Как вызвать диалог поиска с помощью onSearchRequested()

У меня есть моя основная деятельность, определенная в моем файле манифеста, это действие показывает пользователю список параметров, которые им нужно выбрать. Одним из вариантов является опция «Поиск».

<activity 
     android:name=".MenuListActivity" 
     android:label="@string/app_name"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

Активность моего поиска определяется в моем файле манифеста следующим образом.

<activity android:name=".SearchActivity" 
       android:launchMode="singleTop" 
       android:label="@string/app_name"> 
      <intent-filter> 
       <action android:name="android.intent.action.SEARCH" /> 
      </intent-filter> 
      <meta-data android:name="android.app.searchable" 
         android:resource="@xml/searchable"/> 
</activity> 

Теперь моя проблема, когда я называю onSearchRequested() от моего MenuListActivity ничего не происходит.

public void onItemClick(AdapterView<?> parent, View itemClicked, int position, long id) { 
      String strText = items[position]; 

      if (strText.equalsIgnoreCase(getResources().getString(R.string.menu_item_browse))) { 
       startActivity(new Intent(MenuListActivity.this, WSMobileActivity.class)); 
      } else if (strText.equalsIgnoreCase(getResources().getString(R.string.menu_item_search))) { 

      // If i call it like this it doesn't work, nothing happens 
       onSearchRequested(); 

      } else if (strText.equalsIgnoreCase(getResources().getString(R.string.menu_item_locator))) { 
       startActivity(new Intent(MenuListActivity.this, StoreLocatorActivity.class)); 
      } 
     } 

Помогите, как мне обратиться к поисковому запросу из моего MenuActivity?

+0

Не могли бы вы принять какой-то ответ как «Ответ»? – motiver 2013-01-22 23:43:06

ответ

3

Помимо объявления функции SearchActivity в файле манифеста необходимо включить информацию метаданных.

Если вы хотите, чтобы вызвать диалоговое окно поиска по всему приложению затем включают

<meta-data android:name="android.app.default_searchable" 
       android:value=".SearchActivity" /> 

внутри тега приложения.

Если вы хотите, чтобы вызвать диалоговое окно поиска только в той или иной деятельности, а затем включают

<meta-data android:name="android.app.default_searchable" 
       android:value=".SearchActivity" /> 

внутри тега активности.

для получения более подробной информации смотрите пожалуйста http://developer.android.com/guide/topics/search/search-dialog.html.

+0

Я также попытался добавить это в действие и приложение. Ничто не работает для меня. – 2011-08-16 15:21:38

23

Вы проверили свои res/xml/searchable.xml?

<?xml version="1.0" encoding="utf-8"?> 
<searchable xmlns:android="http://schemas.android.com/apk/res/android" 
    android:hint="@string/search_hint" 
    android:label="@string/search_label"> 
</searchable> 

Диалог поиска не отображается, когда у вас есть жестко закодированные строки для подсказки и метки. Они должны быть ресурсами @string.

Кроме того, нет необходимости вызывать или переопределять метод onSearchRequested() в вашей активности вызова, если вы не хотите вызывать поиск из одного из ваших виджетах пользовательского интерфейса, например Button или ListItem.

+1

Это сводило меня с ума, спасибо за подсказку! – steemcb 2012-01-25 12:28:09

0

Тег в теге активности отсутствует в манифесте. замените объявление своей деятельности следующим.

<activity 
     android:name=".MenuListActivity" 
     android:label="@string/app_name"> 
     <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=".SearchActivity" /> 

    </activity> 
0

Я сделал все это, но все еще не может видеть диалоговое окно поиска по API 17. Он работает, однако после добавления

андроида: actionViewClass = «android.widget.SearchView»

в фрагментное меню

<item 
    android:id="@+id/menu_item_search" 
    android:actionViewClass="android.widget.SearchView" 
    android:icon="@android:drawable/ic_menu_search" 
    android:showAsAction="ifRoom" 
    android:title="@string/search"/>