2010-10-28 6 views
0

J'essaie d'implémenter la recherche dans mon application.Comment déclarer l'activité de recherche par défaut

Mon application contient 4 activités et je veux ajouter la boîte de dialogue de recherche seulement sur 3 d'entre eux tandis qu'un seul d'entre eux (ProductsActivity) sera le contexte par défaut.

Malheureusement, lorsque j'activer la recherche, je continue d'obtenir l'erreur suivante: "Key android.app.default_searchable expected String mais la valeur était un java.lang.Integer La valeur par défaut a été retournée."

<activity android:label="@string/app_name" class=".AppEntry" android:name=".AppEntry"> 
    <intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 
     <category android:name="android.intent.category.LAUNCHER" /> 
    </intent-filter> 
</activity> 
<activity android:name=".category.CategoriesListActivity"> 
    <intent-filter> 
     <action android:name="android.intent.action.SEARCH" /> 
     </intent-filter> 
     <meta-data android:name="android.app.searchable" android:resource="@xml/searchable"/> 
</activity> 
<activity android:name=".product.ProductsActivity"> 
     <intent-filter> 
      <action android:name="android.intent.action.SEARCH" /> 
     </intent-filter> 
     <meta-data android:name="android.app.default_searchable" android:resource="@xml/searchable"/> 
    </activity> 

Une idée pourquoi?

Merci

Répondre

2

ne devrait-il être

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

au lieu de passer la référence @xml là encore.

+0

Je ne pense pas que puisque la référence @xml ne soit pas utilisée, la recherche par défaut du système sera le contexte du système – chen

+1

Avez-vous essayé ou deviné? Tous les exemples à savoir http://developer.android.com/guide/topics/search/search-dialog.html ou http://developer.android.com/resources/samples/Wiktionary/AndroidManifest.html utilisent la syntaxe que j'ai mentionnée , avec android: valeur et non android: ressource transmise. Je parle seulement du android.app.default_searchable ici, pas le android.app.searchable. –

+0

OK, j'ai trouvé ce qui n'allait pas - Je devrais déclarer dans l'activité CategoriesListActivity que la recherche par défaut est ProductsActivity – chen

3

Pour l'activité de recherche par défaut, vous devez placer l'étiquette de métadonnées sous l'étiquette d'application.

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

<activity android:name=".ProductActivity" > 
    ... 
    <meta-data android:name="android.app.default_searchable" 
     android:value=".SearchActivityForProducts"/> 
</activity> 
... 

Dans cet exemple la recherche d'application par défaut sera fait sur le DefaultSearchActivity, alors que dans le ProductActivity la recherche sera sur SearchActivityForProducts. J'espère que ça aide quelqu'un.

+0

mais il ne suffit pas avec

0

Une chose est vraiment important ici de nommer correctement vos activités que les directives Android explique http://developer.android.com/guide/topics/manifest/activity-element.html#nm

android:name The name of the class that implements the activity, a subclass of Activity. The attribute value should be a fully qualified class name (such as, "com.example.project.ExtracurricularActivity"). However, as a shorthand, if the first character of the name is a period (for example, ".ExtracurricularActivity"), it is appended to the package name specified in the element. Once you publish your application, you should not change this name (unless you've set android:exported="false").

There is no default. The name must be specified.

Si vous ne mettez pas le ministère des Transports dans le nom de votre activité, votre action de recherche ne fonctionne que sur l'activité vous avez déclaré "default_searchable". Ce petit DOT nous a coûté des heures alors faites attention!

Questions connexes