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:

  • Obtenir une notification envoyée par courrier dans onActivityResult "Android"
  • Comment partagez-vous un projet Android?
  • Exigence de mentionner la version des services Google Play dans le manifeste de l'application
  • Style un widget SearchView à l'aide de la bibliothèque de support v21
  • Ajouter des autorisations dans AndroidManifest.xml dans Android Studio?
  • Liste de recherche Android lors de la saisie
  •  <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.