Deux activités searchable.xml dans un AndroidManifest.xml

J'ai une application Android qui propose quelques activités différentes pour la navigation sur des articles et des images téléchargés à partir de RSS.

J'aimerais pouvoir proposer de brancher le bouton de recherche dans la boîte de dialogue Rechercher , en utilisant le fichier searchable.xml . J'ai réussi à le faire avec une seule recherche, en utilisant:

  • Liste de recherche Android lors de la saisie
  • Comment intégrer l'activité recherchée avec la recherche vocale Ok Google?
  • Comment partagez-vous un projet Android?
  • Est-ce que Android: exporté = "vrai" est vraiment nécessaire pour un service d'authentification?
  • L'activité recherchable s'appelle deux fois
  • Comment ajouter une permission manifeste à l'application Android?
  •  <activity android:name=".search.SearchResultsActivity" android:label="@string/search_results_activity_title" > <intent-filter> <action android:name="android.intent.action.SEARCH" /> </intent-filter> <meta-data android:name="android.app.searchable" android:resource="@xml/searchable_articles"/> </activity> 

    Et dans <application />

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

    Je peux maintenant lancer la boîte de dialogue de recherche de toute activité, et elle lance la rechercheResultsActivity.

    Je voudrais maintenant pouvoir rechercher des images lorsque l'utilisateur est ImageListActivity , en utilisant searchable_images.xml , et utiliser la valeur par défaut partout ailleurs.

    J'ai une SearchResultsImageActivity qui comprend l'élément de méta-données suivant, et a utilisé le même élément dans ImageListActivity .

     <meta-data android:name="android.app.searchable" android:resource="@xml/searchable_images"/> 

    En appuyant sur le bouton de recherche dans ImageListActivity , j'obtiens la recherche par défaut de searchable_articles.xml .

    Si je modifie le default_searchable à SearchResultsImageActivity , la recherche d'image est toujours lancée et la recherche d'article n'est jamais lancée.

    Si je supprime complètement l'élément de méta-données par défaut et ajoute searchable méta-données recherchées uniquement des activités sélectionnées, aucune recherche n'est lancée.

    Je suis tout à fait sûr que cela devrait être possible, mais je ne sais pas ce que je fais mal.

    3 Solutions collect form web for “Deux activités searchable.xml dans un AndroidManifest.xml”

    Dans votre fichier Manifest , mettez à jour la balise d'activité ImageListActivity

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

    Donc, lorsque vous déclencherez une recherche native dans ImageListActivity vous invoquez SearchResultsImageActivity et par défaut pour les autres.

    En supposant SearchResultsImageActivity est searchable .

    L'une des façons dont j'ai fait cela était de créer de fausses activités puis de décaler les activités lorsque vous en avez besoin.

     <activity android:name="activitySearchMain" /> <activity android:name="activitySearchSub1"> <intent-filter> <action android:name="android.intent.action.SEARCH" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.ALTERNATIVE" /> <category android:name="android.intent.category.SELECTED_ALTERNATIVE" /> <data android:scheme="user" /> </intent-filter> </activity> <activity android:name="activitySearchSub2"> <intent-filter> <action android:name="com.sample.twitter.action.SEARCH" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.ALTERNATIVE" /> <category android:name="android.intent.category.SELECTED_ALTERNATIVE" /> <data android:scheme="user" /> </intent-filter> </activity> 

    Créez deux classes nommées pour les sous-activités.

    Ensuite, créez des intentions comme ceci lorsque le composant est cliqué …

     Intent sourceIntent = getIntent(); Intent newIntent = new Intent(this, activitySearchSub2.class); newIntent.setAction(activitySearchSub2.ACTION2); newIntent.setData(sourceIntent.getData()); startActivity(newIntent); finish(); 

    Et appelez les intentions de onClick quand un bouton est cliqué ou un autre composant est cliqué:

    Si vous annulez la fonction de recherche uniquement dans cette activité, cela devrait empêcher l'appel de recherche de passer au niveau de l'application. La valeur de retour contrôle si l'appel est propagé.

     @Override public boolean onSearchRequested() { onPromptSearch(); return false; // don't go ahead and show the search box } 
    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.