11

Ich versuche, Vorschläge für SearchView zu bekommen. Ich habe einen benutzerdefinierten Inhaltsanbieter dafür implementiert. Ich habe auch auf diese link verwiesen, um Vorschläge für das SearchView zu implementieren. Das Problem, das ich bin vor, ich null Wert erhalten auf searchManager.getSearchableInfo(getComponentName())Android: getSearchableInfo (getComponentName()) gibt null zurück?

Hier sind die Schnipsel:

AndroidManifest.xml

<application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 

    <provider android:name=".SearchProvider" 
     android:enabled="true" 
     android:authorities="com.example.currentlocationmapdemo" 
     android:grantUriPermissions="true" 
     android:exported="true"> 
     <grant-uri-permission android:pathPattern="*" /> 
    </provider> 
    <uses-library android:name="com.google.android.maps" /> 

    <activity 
     android:name=".MainActivity" 
     android:label="@string/title_activity_main" > 
     <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"/> 
    </activity> 

searchable.xml

<?xml version="1.0" encoding="utf-8"?> 
<searchable xmlns:android="http://schemas.android.com/apk/res/android" 
android:label="label" 
android:hint="hint" 
android:searchSuggestAuthority="com.example.currentlocationmapdemo" 
android:searchSuggestSelection=" ? "> 

MainActivity

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.searchview_in_menu, menu); 
    MenuItem searchItem = menu.findItem(R.id.action_search); 
    mSearchView = (SearchView) searchItem.getActionView(); 
    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); 
SearchableInfo info = searchManager.getSearchableInfo(getComponentName()); // null returned 
mSearchView.setSearchableInfo(info); 

return true; 
} 

Antwort

17

Mindestens eine Ihrer Aktivitäten - die, die Sie das tun Suche von genügt - muss im Manifest darin diese Intent-Filter haben:

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

Wenn nicht, dann searchManager.getSearchableInfo(getComponentName()) immer null zurück, und die Konfiguration wird ignoriert.

Dies tötete mich für einen Tag - ich dachte, es war ActionBarSherlock-bezogen, aber nein, es funktioniert gut damit. Das Problem war, dass ich versuchte, die Probe kurzzuschließen, wie Sie auch haben :-)

+1

Als eine Anmerkung, kann ich es derzeit nur funktionieren, wenn der Intent-Filter in der aktuellen Aktivität ist. Es ist ziemlich ärgerlich, weil ich möchte, dass es zu einer anderen Aktivität geht, um Suchergebnisse anzuzeigen. Wenn Sie wissen, was damit los ist, wäre ich dankbar zu hören. – Erhannis

+0

Verlorene Stunden dabei. Es war der Absichtsfilter, der fehlte. –

8

Ich denke, Ihr Ansatz ist falsch. Sie sollten 2 Aktivitäten haben - 1: Hauptaktivität, die als SearchView (auf ActionBar oder Layout) und 2: SearchActivity hat, die gestartet wird, wenn die Suche ausgeführt wird.

Vielleicht können Sie es auch so machen, aber ich bin mir nicht sicher. Wo möchten Sie ACTION_SEARCH in Ihrem Ansatz erhalten? Normalerweise tun Sie, dass in OnCreate in Ihrem searchActivity wie folgt aus:

Intent intent = getIntent(); 
if (Intent.ACTION_SEARCH.equals(intent.getAction())) { 
    String query = intent.getStringExtra(SearchManager.QUERY); 
    System.out.println("searching for: " + query); 
} 

ich es auf zwei Aktivitäten tat und es funktionierte für mich. Eine weitere Sache, die ich tun musste, und ich fand nicht in Android Suche Tutorial hinzugefügt wurde:

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

In Manifest für meine MainActivity

+0

Meine Implementierung war eigentlich richtig. Das Problem war sehr albern. Ich hatte " in menu.xml verpasst. Die XML-Datei zeigte jedoch keine Fehler. – FireAndIce

+4

Das 'default_searchable' Attribut ist das einzige, was NICHT offiziell dokumentiert ist. Vielen Dank! Machte mich verrückt. Die Android-Dokumentation ist ein Witz. – EinLama

Verwandte Themen