11

Sto cercando di ottenere suggerimenti per SearchView. Ho implementato un fornitore di contenuti personalizzato per questo. Ho anche fatto riferimento a questo link per implementare i suggerimenti per SearchView. Il problema che sto affrontando è, ottengo valore nullo sul searchManager.getSearchableInfo(getComponentName())Android: getSearchableInfo (getComponentName()) restituisce null?

Qui ci sono i frammenti:

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; 
} 

risposta

17

Almeno una delle vostre attività - quello che si sta facendo la la ricerca da è sufficiente - deve avere questo intent-filtro in esso nel manifesto:

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

Se no, allora searchManager.getSearchableInfo(getComponentName()) restituisce sempre nullo, e la configurazione viene ignorato.

Questo mi ha ucciso per un giorno - ho pensato che fosse correlato a ActionBarSherlock, ma non funziona bene con quello. Il problema era che stavo tentando di cortocircuitare il campione, come hai fatto anche tu :-)

+1

Come nota, attualmente posso farlo funzionare SOLO se il filtro intent è nell'attività corrente. È piuttosto aggravante, perché mi piacerebbe che andasse a un'altra attività per mostrare i risultati della ricerca. Se sai cosa succede, sarei grato di saperlo. – Erhannis

+0

ore perse su questo. Era il filtro intent mancante. –

8

Credo che il tuo approccio è sbagliato. Dovresti avere 2 attività - 1: Attività principale che ha come SearchView (su ActionBar o layout) e 2: SearchActivity che verrà avviato quando viene eseguita la ricerca.

Forse puoi anche farlo ma non sono sicuro. Dove vorresti recitare l'intento ACTION_SEARCH nel tuo approccio? Normalmente lo si fa in OnCreate nel vostro searchActivity così:

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

ho fatto su due attività e ha funzionato per me. Una cosa aggiuntiva che dovevo fare e non ho trovato in Android Search tutorial è stato aggiunto:

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

Nel manifestare la mia MainActivity

+0

La mia implementazione era effettivamente corretta. Il problema era molto sciocco. Ho omesso ' ' nel menu.xml. Tuttavia, il file xml non ha mostrato errori. – FireAndIce

+4

L'attributo 'default_searchable' è l'unica cosa che NON è ufficialmente documentata. Grazie! Mi ha fatto impazzire La documentazione di Android è uno scherzo. – EinLama

1

Il tuo searchable.xml contiene stringhe letterali (suggerimento ed etichetta), dovrebbero essere riferimenti. Questo è ciò che non funziona in questo modo: SearchInfo always coming out null

Problemi correlati