Quelqu'un connaît-il un didacticiel ou un exemple de mise en œuvre de l' interface de recherche Android standard avec Fragment
s? En d'autres termes, est-il possible de mettre une recherche standard avec un SearchManager
dans un fragment?
java
android
sqlite
android-fragments
android-searchmanager
Ceinture noire
la source
la source
Réponses:
En bref, vous ne pouvez pas. Il y a plusieurs raisons pour lesquelles la création d'une interface de recherche dans un
Fragment
n'est pas possible.Lors de la création d'une interface de recherche, vous devez spécifier une "activité de recherche" par défaut dans votre manifeste Android. Comme je suis sûr que vous le savez, un
Fragment
ne peut exister sans un parentActivity
et donc, cette séparation n'est pas possible.Si vous avez déjà compris le n ° 1, je suppose que vous avez posé cette question dans l'espoir qu'il existe un "hack" magique qui peut faire le travail. Cependant, la documentation indique que,
Le système interne sous-jacent chargé de fournir les résultats de la recherche attend un
Activity
, pas unFragment
; ainsi, la mise en œuvre d'une interface de recherche totalement indépendante de anActivity
n'est pas possible, car elle nécessiterait des modifications du système sous - jacent lui-même . Consultez le code source de laSearchableInfo
classe si vous ne me croyez pas :).Cela étant dit, il ne semble pas qu'il soit trop difficile de réaliser quelque chose de similaire à ce que vous décrivez. Par exemple, vous pouvez envisager d'implémenter votre activité de recherche afin qu'elle accepte l'
android.intent.action.SEARCH
intention et (au lieu d'afficher immédiatement les résultats dans unListView
, par exemple) transmette la requête de recherche à vosFragment
s. Par exemple, considérez l'activité de recherche suivante:Lorsqu'une demande de recherche est effectuée, le système lancera votre activité de recherche, exécutera la requête et transmettra les résultats à une activité de conteneur (en fonction de votre implémentation de
doMySearch
). L'activité du conteneur transmettra ensuite ces résultats à l'objet de recherche contenuFragment
, dans lequel les résultats seront affichés. La mise en œuvre nécessite un peu plus de travail que ce que vous espériez probablement, mais je suis sûr qu'il existe des moyens de la rendre plus modulaire, et il semble que cela puisse être le mieux que vous puissiez faire.ps Si vous utilisez cette approche, vous devrez peut-être porter une attention particulière aux activités qui sont ajoutées / supprimées à la backstack. Consultez cet article pour plus d'informations sur la manière de procéder.
pps Vous pouvez également oublier complètement l'interface de recherche standard et implémenter simplement une recherche simple dans un
Fragment
comme décrit dans l'article de Raghav ci-dessous .la source
SearchManager
pourFragment
s, non? (ou quelque chose comme ça)Voici l'exemple pour rechercher quelque chose à l'aide de fragments. J'espère que cela aide et c'est ce que vous recherchez:
la source
Fragment
afin que je ne me plains pas. Félicitations! : PonQueryTextChange
méthode n'est pas appelée.Il est tout à fait possible de rechercher dans un fragment à l'aide de l'API ActionBar SearchView ActionView standard. Cela fonctionnera également avec Android 2.1 (niveau d'API 7) en utilisant les classes de support AppCompat v7.
Dans votre fragment:
Dans votre menu XML
la source
item.setShowAsAction(MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW | MenuItem.SHOW_AS_ACTION_IF_ROOM); item.setActionView(searchView);
Utilisation des classes de support AppCompat v7. Il suffit d' ajouter quelque chose à @ David solution de de @Rookie solution pour le faire fonctionner correctement de manière simple, voici mon code fragment:
MyFragment :
J'ai ajouté le
onActivityCreated
, car sans appelersetHasOptionsMenu(true);
le système ne saura pas que ce fragment doit interagir avec le menu.puis j'ai supprimé la ligne
inflater.inflate(R.menu.main, menu);
car elle doublait les éléments de menu depuis que l'activité a gonflé un menu, puis Fragment a gonflé un autre menuMerci à @David et @Rookie
la source
Lorsque vous travaillez avec,
Fragments
vous devez toujours utiliser unActivity
pour contrôler et affecter le fichierFragments
. CelaActivity
peut avoir une fonctionnalité de recherche comme avant.Je suis récemment passé d'une application `` normale ''
Activity
à uneFragment
application basée et la fonctionnalité de recherche a fonctionné de la même manière pour moi.Avez-vous essayé de travailler dessus et n'y avez pas réussi? Si tel est le cas, donnez plus de détails dans votre question.
ÉDITER:
Si vous voulez avoir une recherche spécifique de fragment, ont tous vos
Fragments
étendre une interfaceMyFragment
avec unestartSearch
méthode, et votreActivity
l »startSearch
appel de la méthode du fragment courantstartSearch
de la méthode.la source
Je pense que j'ai réussi: vous pouvez en fait utiliser des fragments et ajouter une icône de recherche à une barre d'action afin qu'une recherche soit possible à l'intérieur des fragments. L'astuce consiste à utiliser une barre d'action, une vue d'action, un écouteur, un chargeur et un adaptateur bien sûr.
Cela fonctionne plutôt bien même si cela contourne complètement le mécanisme de recherche de la plate-forme Android (mais cela pourrait être complété par un peu de travail pour trouver ce que @Alex Lockwood décrit et passer la recherche aux fragments). Il ne réagirait pas à une intention comme prévu dans le cas d'une activité, mais cela fonctionne: les utilisateurs peuvent rechercher à l'intérieur des fragments.
Voici le code:
Le fichier xml pour le menu des fragments de recherche res / menu / menu_search.xml:
Et le fichier de mise en page xml res / layout / search_in_fragments.xml
la source
SearchView
pour sa bibliothèque ActionBarSherlock en raison de sa complexité ( voir son commentaire ici ). Comme vous pouvez le voir (et comme je l'ai décrit dans ma réponse également), la mise en œuvre de la recherche d'Android est tout sauf triviale ... elle est enracinée dans le système sous-jacent, et cela rend même les bibliothèques tierces difficiles à écrire (et cela en dit long. .. Jake Wharton est comme le Chuck Norris des bibliothèques tierces!: D).SearchView.java
code source ici.Utilisez le
ActionBar
etSearchView
. Vous pourrez gérer les recherches sans aucune connexion à l'activité.OnQueryTextListener
Définissez simplement un sur SearchView.Voir cet article pour plus de détails sur la recherche personnalisée.
la source
d'autres solution ..... je n'aime pas ça. C'est plus facile pour moi, mais c'est mon idée, j'attends votre opinion
la source
A
Fragment
ne peut pas exister en dehors d'unActivity
, niFragment
être lié à unandroid.intent.action.SEARCH
ou à un autreintent-filter
.Donc, sans utiliser un
Activity
pour envelopper leFragment
, ce que vous demandez n'est pas possible.la source
En cas de fragments dans un ViewPager, je pourrais le faire en bloquant le bouton de recherche lorsque je ne suis pas sur le fragment où je veux donner une barre de recherche. Dans l'activité:
Et en cas d'absence de bouton de recherche physique, j'ai ajouté un élément d'action dans le fragment, qui déclenche ce code:
la source
J'ai trouvé une solution :) vous pouvez remplacer cette méthode (startActivity (Intent)) dans votre BaseActivity, puis vérifier si l'action est ACTION_SEARCH puis faire votre travail spécial: D
la source
Oui c'est possible,
s'il vous plaît implémente la vue Recherche sur votre activité, 'onQueryTextChange' dans Activity écoutera également la recherche dans le fragment, vous pouvez vérifier la visibilité du fragment dans 'onQueryTextChange', s'il est visible, vous pouvez appeler votre méthode de recherche pour fragment, son fonctionnement parfait dans mon code
la source