11

Śledziłem this Android guide, aby dodać pasek wyszukiwania do działania. Konfiguracja wygląda następująco:searchManager.getSearchableInfo (getComponentName()) zwraca wartość null

res/menu/activity_main.xml:

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" > 

<item 
    android:id="@+id/search" 
    android:title="@string/menu_search" 
    android:icon="@android:drawable/ic_menu_search" 
    android:showAsAction="collapseActionView|ifRoom" 
    android:actionViewClass="android.widget.SearchView" /> 
<item 
    android:id="@+id/menu_settings" 
    android:orderInCategory="100" 
    android:showAsAction="never" 
    android:title="@string/menu_settings" 
    android:icon="@drawable/ic_menu_settings"/> 

</menu> 

res/xml/searchable.xml: wejście

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

aktywny w pliku manifestu:

<activity 
     android:name="de.ivu.realtime.app.activity.MainActivity" 
     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.searchable" 
      android:resource="@xml/searchable" /> 
     <meta-data 
      android:name="android.app.default_searchable" 
      android:value="de.ivu.realtime.app.activity.MainActivity" /> 
    </activity> 

i kod w głównej funkcji:

@SuppressLint("NewApi") 
@Override 
public boolean onCreateOptionsMenu(Menu menu) 
{ 
    this.getMenuInflater().inflate(R.menu.activity_main, menu); 

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) 
    { 
     SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); 
     SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView(); 
     SearchableInfo searchableInfo = searchManager.getSearchableInfo(getComponentName()); 
     searchView.setSearchableInfo(searchableInfo); 
    } 

    return true; 

Połączenie z numerem searchManager.getSearchableInfo(getComponentName()); zawsze zwraca null. Widziałem to w innych pytaniach dotyczących stackoverflow, jednak żadne z przedstawionych tam rozwiązań nie wydaje się mieć zastosowania w mojej sprawie.

  • XML Menu ma <?xml version="1.0" encoding="utf-8"?> nagłówku
  • przeszukiwania XML nie trudno zakodowane ciągi
  • Zmiana nazwy elementu menu nie działa
  • czyszczenie i regeneracja nie załatwi albo

Każda pomoc jest bardzo doceniana. Dzięki!

+0

możliwy duplikat [Nie można uzyskać podglądu w pasku akcji do pracy] (http://stackoverflow.com/questions/11699206/cannot-get-searchview-in-actionbar-to-work) – Krizai

Odpowiedz

9

Dodaj go do aktywności, gdzie masz umieścić SearchView

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

<intent-filter> 
    <action android:name="android.intent.action.SEARCH" /> 
</intent-filter> 
+0

Dziękuję za odpowiedź. 'SearchView' znajduje się w' ActionBar' (patrz zaktualizowane pytanie). Ponieważ "MainActivity" ma zasoby do dostarczania wyników wyszukiwania, dodałem twój kod do sekcji "MainActivity" manifestu. Nadal 'searchManager.getSearchableInfo (getComponentName()); zwraca' null'. – Chris

+0

Zaktualizowano odpowiedź. Spróbuj również zastosować filtr intencyjny. –

+0

Dzięki, to działa! Korzystając z tego drugiego przewodnika http://developer.android.com/guide/topics/search/search-dialog.html, po prostu to rozgryzłem :-). – Chris

2

W moim przypadku problem był mój błąd podczas integracji z ActionBarSherlock. W takim przypadku android:actionViewClass powinno być com.actionbarsherlock.widget.SearchView zamiast android.widget.SearchView. Wiem, że to brzmi głupio, ale spędziłem 20 minut próbując dowiedzieć się, dlaczego searchView jest w moim kodzie, który jest podobny do twojego.

+0

Mój problem był odwrotny. Zintegrowałem ActionBarSherlock i zostało to usunięte w aktualizacji aplikacji. com.actionbarsherlock.widget.SearchView musiał zostać usunięty i zastąpiony przez Android.widget.SearchView –

1

Wymienić:

android:actionViewClass="android.widget.SearchView" 

Z:

app:actionViewClass="android.widget.SearchView" 

Ponieważ app jest często używany, jeśli używasz biblioteki wsparcia.

+0

Super! ... Dzięki – Khalil