2013-06-21 5 views
19

Ich habe ein funktionierendes Such-Widget und möchte Suchverlaufsvorschläge hinzufügen. Ich folgte dem Android-Tutorial (http://developer.android.com/guide/topics/search/adding-recent-query-suggestions.html), und während die Suche noch funktioniert, werden keine Vorschläge angezeigt. Hier ist mein Code:Android SearchRecentSuggestions - Vorschläge werden nicht angezeigt, wenn Sie in SearchView eingeben

  1. Inhalt Anbieter

    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. Deklarieren Anbieter in Manifest

    <provider 
        android:name=".SearchHistoryProvider" 
        android:authorities="com.mypackage.SearchHistoryProvider"> 
    </provider> 
    
  3. durchsuchbare Konfiguration

    <?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. Speichern der Abfragen an den Content-Provider (in meinem durchsuchbare Aktivität)

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

Alles funktioniert gut, außer die Vorschläge eigentlich nicht auftauchen (die Suche nach gleich aussieht, bevor ich hinzugefügt sie). Jede Hilfe würde sehr geschätzt werden!

+0

Ah, ich löste das Problem. Es war ein Fehler in der Android-Manifestkonfiguration (der Name des Providers). Wie kann ich das Kopfgeld entfernen? –

+0

@ Eng.Fouad wenn Sie das Kopfgeld für andere Frage setzen Sie können Bounty nicht entfernen! –

+0

@ Eng.Fouad Moderator kann das Kopfgeld in extremen Fällen zurückerstatten, können Sie versuchen, und markieren Sie diesen Beitrag, wählen Sie "Andere" und verpfänden Sie Ihren Fall. Immer noch nicht zu spät. :) –

Antwort

2

Ich glaube, das Problem war, dass die Deklaration des SearchHistoryProvider in der Manifest.xml falsch war.

android:name=".SearchHistoryProvider" 

Schreiben $ Name ist eine Abkürzung für $ DEFAULTPACKAGE $ NAME, also, wenn Ihr $ DEFAULTPACKAGE ist 'com.myapp' und Sie .SearchHistoryProvider als android schreiben:.. Name Ihres Provider, Android wird es einfach nicht finden, da es sich in com.mypackage befindet, wie die erste Zeile des folgenden Codes anzeigt.

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); 
    } 
} 
Verwandte Themen