2013-06-21 10 views
19

Ho un widget di ricerca funzionante e voglio aggiungere suggerimenti per la cronologia delle ricerche. Ho seguito il tutorial per Android (http://developer.android.com/guide/topics/search/adding-recent-query-suggestions.html) e mentre la ricerca continua a funzionare, non vengono visualizzati suggerimenti. Qui è il mio codice:Android SearchRecentSuggestions - i suggerimenti non vengono visualizzati durante la digitazione in SearchView

  1. fornitore di contenuti

    package com.mypackage; 
    
    import android.content.SearchRecentSuggestionsProvider; 
    
    public class SearchHistoryProvider extends SearchRecentSuggestionsProvider { 
        public final static String AUTHORITY = SearchHistoryProvider.class.getName(); 
        public final static int MODE = DATABASE_MODE_QUERIES; 
    
        public SearchHistoryProvider() { 
         setupSuggestions(AUTHORITY, MODE); 
        } 
    } 
    
  2. Dichiarare provider nel manifesto

    <provider 
        android:name=".SearchHistoryProvider" 
        android:authorities="com.mypackage.SearchHistoryProvider"> 
    </provider> 
    
  3. configurazione ricercabile

    <?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" 
        android:voiceSearchMode="showVoiceSearchButton|launchRecognizer" 
        android:searchSuggestAuthority="com.mypackage.SearchHistoryProvider" 
        android:searchSuggestSelection=" ?"> 
    </searchable> 
    
  4. Salvataggio delle query al fornitore di contenuti (nella mia attività ricercabile)

    private void handleIntent(Intent intent) { 
    if (Intent.ACTION_SEARCH.equals(intent.getAction())) { 
    
        String query = intent.getStringExtra(SearchManager.QUERY); 
        SearchRecentSuggestions suggestions = new SearchRecentSuggestions(this, 
             SearchHistoryProvider.AUTHORITY, SearchHistoryProvider.MODE); 
        suggestions.saveRecentQuery(query, null); 
    
        // Collapse the search view as a search is performed 
        MenuItem searchItem = mMenu.findItem(R.id.search); 
        SearchView searchView = (SearchView) mMenu.findItem(R.id.search).getActionView(); 
        searchItem.collapseActionView(); 
        searchView.setQuery("", false); 
    
        // send the query to the global search activity for loading the data 
        Intent globalSearchIntent = new Intent(this, GlobalSearchFragmentActivity.class); 
        GroceryOTGUtils.copyIntentData(intent, globalSearchIntent); 
        globalSearchIntent.putExtra(GlobalSearchFragmentActivity.GLOBAL_SEARCH, true); 
        startActivity(globalSearchIntent); 
    } 
    } 
    

Tutto funziona bene, tranne i suggerimenti in realtà non si presentano (la ricerca sembra la stessa di prima che io li aggiunsi). Qualsiasi aiuto sarebbe molto apprezzato!

+0

Ah, ho risolto il problema. È stato un errore nella configurazione del manifest Android (il nome del provider). Come posso rimuovere la taglia? –

+0

@ Eng.Fouad se metti il ​​bounty per le altre domande non puoi rimuovere bounty! –

+0

@ Eng.Fouad moderatore può rimborsare la taglia in casi estremi, puoi provare e contrassegnare questo post, scegliere "Altro" e giurare il tuo caso. Non è ancora troppo tardi. :) –

risposta

2

Penso che il problema era che la dichiarazione del SearchHistoryProvider nel Manifest.xml era errata.

android:name=".SearchHistoryProvider" 

scrittura $ NAME è una scorciatoia per $ DEFAULTPACKAGE $ NOME, quindi se il vostro $ DEFAULTPACKAGE è 'com.myapp' und si scrive .SearchHistoryProvider come l'androide:.. Nome del Provider, Android semplicemente non lo troverà, poiché si trova in com.mypackage, come indica la prima riga del seguente codice.

package com.mypackage; 

import android.content.SearchRecentSuggestionsProvider; 

public class SearchHistoryProvider extends SearchRecentSuggestionsProvider { 
    public final static String AUTHORITY = SearchHistoryProvider.class.getName(); 
    public final static int MODE = DATABASE_MODE_QUERIES; 

    public SearchHistoryProvider() { 
     setupSuggestions(AUTHORITY, MODE); 
    } 
}