Android recherche avec des Fragments
N'quelqu'un connais un tutoriel ou un exemple de la façon de mettre en œuvre la norme Android interface de recherche avec Fragment
s? En d'autres termes, est-il possible de mettre une recherche standard avec un SearchManager
dans un Fragment?
- Qui aimeriez-vous octroyer la prime à @blackbelt ?Raghav a donné la réponse que je cherchais. mais Alex LockWood également répondu à la première partie de votre question.
- J'accepte LockWood réponse. D'attribution de la prime que vous le souhaitez (je pense que c'est mieux)
- Je suis content que nous avons fini par obtenir une telle variété de réponses correctes et les solutions de contournement! 🙂
- Quelqu'un peut-il me donner la réponse à cette question..? Je suis coincé ici stackoverflow.com/questions/10600660/...
- J'utilise cette technique pour rester dans le fragment après l'ajout de la SearchView à l'actionbar: stackoverflow.com/a/6939735/1068167 . Ma demande n'est pas encore fait mais j'espère que cela va fonctionner.
- J'ai mis en œuvre avec succès de la Recherche dans les fragments à l'aide de l'Android Interface de Recherche(SearchView dans la Barre d'Action) à la coutume de suggestions et de l'affichage des résultats. Chaque fragment charge ses propres suggestions dynamiquement à partir du réseau(mis en cache dans un local DB). Il a fallu beaucoup de travail, mais il fonctionne très bien. Ajouter un commentaire si vous souhaitez me donner ma réponse, car il faudra beaucoup d'explications.. 🙂
- aller de l'avant. pourrait être utile pour d'autres personnes. merci
Vous devez vous connecter pour publier un commentaire.
En bref, vous ne pouvez pas. Il ya un couple de raisons pourquoi la création d'une interface de recherche au sein d'un
Fragment
n'est pas possible.Lors de la création d'une base de l'interface, vous devez spécifier une valeur par défaut "consultable à l'activité" dans votre manifeste Android. 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à deviné #1 déjà, je suppose que vous avez posé cette question, dans l'espoir qu'il y a de magique "hack" qui peut faire le travail. Toutefois, la documentation précise que,
Du sous-jacent système interne qui est responsable de fournir des résultats de recherche s'attend à une
Activity
, pas unFragment
; ainsi, la mise en œuvre d'une interface de recherche qui est complètement indépendant d'unActivity
n'est pas possible, il faudrait des changements à la système sous-jacent lui-même. Découvrez le code source de laSearchableInfo
classe, si vous ne me croyez pas :).Cela étant dit, il ne semble pas comme il serait trop difficile à réaliser quelque chose de similaire à ce que vous décrivez. Par exemple, vous pourriez envisager de mettre en œuvre votre indexation Activité, de sorte qu'il accepte la
android.intent.action.SEARCH
l'intention et de l' (au lieu d'immédiatement l'affichage des résultats dans unListView
, par exemple) va passer la requête de recherche à votreFragment
s. Par exemple, considérez les points suivants consultable Activité:Lorsqu'une recherche-demande en est faite, le système lancera votre consultable activité, effectuer la requête, et transmettre les résultats à certaines Activités de manutention de conteneurs (en fonction de votre mise en œuvre de
doMySearch
). Le conteneur de l'Activité de la transmettre ensuite ces résultats pour les contenus consultablesFragment
, dans lequel les résultats seront affichés. La mise en œuvre nécessite un peu plus de travail que ce que vous étiez probablement dans l'espoir d', mais je suis sûr qu'il ya des façons que vous pouvez le rendre plus modulaire, et il semble que cela pourrait être le meilleur que vous pouvez faire.p.s. Si vous utilisez cette approche, vous pourriez avoir à payer une attention particulière à ce qui Activitys sont ajoutés/supprimés à la backstack. Voir ce post pour plus d'information sur la façon dont cela pourrait être fait.
p.p.s. Vous pouvez également oublier le standard de l'interface de recherche complètement et mettre en œuvre une recherche simple dans un
Fragment
comme décrit dans Raghav du post ci-dessous.SearchManager
pourFragment
droit? (ou quelque chose comme ça)Voici l'exemple d'une recherche à l'aide de fragments. Espérons que cela aide, et c'est ce que vous cherchez:
Fragment
donc je n'aurais pas à me plaindre. Bravo! 😛onQueryTextChange
méthode n'est pas appelée.Il est tout à fait possible de faire une recherche dans un fragment à l'aide de la norme de contrôle ActionBar SearchView ActionView API. Cela fonctionne en arrière pour Android 2.1 (API level 7) trop à l'aide de AppCompat des cours de soutien en v7.
Dans votre fragment:
Dans votre menu XML
Activity
. Vous devez définirtheme
qui prend en chargeActionBar
sur elle.MenuItemCompat.setShowAsAction(item, MenuItemCompat.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW | MenuItemCompat.SHOW_AS_ACTION_IF_ROOM); MenuItemCompat.setActionView(item, sv);
ce sont les lignes sont dépréciés s'il vous plaît aidez-moi dans ce cas broitem.setShowAsAction(MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW | MenuItem.SHOW_AS_ACTION_IF_ROOM); item.setActionView(searchView);
À l'aide de AppCompat des cours de soutien en v7. Juste ajouter quelque chose à @David 's solution de @Rookie solution pour le faire fonctionner correctement de manière simple, voici mon fragment de code:
MyFragment:
J'ai ajouté le
onActivityCreated
, parce que sans appelsetHasOptionsMenu(true);
le système ne saura pas que ce fragment doit interagir avec le menu.puis j'ai enlevé la ligne
inflater.inflate(R.menu.main, menu);
parce qu'elle a doublé les éléments de menu depuis l'Activité gonflé un menu, puis Fragment gonflé un autre menuGrâce à @David et @Rookie
Lorsque l'on travaille avec
Fragments
vous devez toujours utiliser unActivity
de contrôle et d'attribuer leFragments
.Cette
Activity
peut avoir la fonctionnalité de recherche qu'avant.J'ai récemment passé de "normal"
Activity
application basée, pour uneFragment
en fonction de l'app et de la fonctionnalité de recherche ont travaillé exactement la même chose pour moi.Avez-vous essayé de travailler sur, et ne pas réussir? Si oui donner plus de détails à votre question.
EDIT:
Si vous voulez avoir un fragment spécifique de recherche, d'avoir tous vos
Fragments
étendre une interfaceMyFragment
avec unstartSearch
méthode, et vous avez votreActivity
'sstartSearch
appel de la méthode le courant du fragmentstartSearch
méthode.Je crois que j'ai réussi : vous pouvez utiliser des fragments et ajouter une icône de recherche pour une barre d'action, de sorte qu'une recherche est possible à l'intérieur de la forme de fragments. L'astuce est d'utiliser une barre d'action, une action vue, un auditeur, un chargeur et un adaptateur de cours.
Cela fonctionne plutôt bien même si elle ignore totalement la plate-forme android mécanisme de recherche (mais elle peut être remplie avec un peu de travail pour trouver ce que @Alex Lockwood décrit et passer à la recherche de fragments). Il ne réagit pas à une intention comme prévu dans le cas d'une activité, mais il fonctionne : les utilisateurs peuvent rechercher à l'intérieur des fragments.
Voici le code :
Le fichier xml pour le menu de la recherche des fragments res/menu/menu_search.xml:
Et le xml fichier de mise en page res/layout/search_in_fragments.xml
SearchView
pour son ActionBarSherlock de la bibliothèque en raison de sa complexité (voir son commentaire ici). Comme vous pouvez le voir (et comme je l'ai indiqué dans ma réponse en tant que bien), Android de la recherche, de la mise en œuvre est tout sauf trivial... il est ancré dans le système sous-jacent, et de ce fait même la 3e partie des bibliothèques difficile à écrire (et c'est peu dire... Jake Wharton est comme le Chuck Norris de la 3e partie des bibliothèques! :D).SearchView.java
le code source ici.Utiliser le
ActionBar
etSearchView
. Vous serez en mesure de gérer des recherches sans aucun lien avec l'Activité. Juste mettre unOnQueryTextListener
à la SearchView.Voir cette post pour plus de détails sur la recherche personnalisée.
d'autres solution..... je n'aime pas ça.
Ce plus facile pour moi.Mais ses mon idée.Im attente de vôtre avis
Un
Fragment
ne peut pas exister en dehors d'unActivity
, ni unFragment
être lié à unandroid.intent.action.SEARCH
ou de tout autreintent-filter
.Sans l'aide d'un
Activity
à envelopper leFragment
, ce que vous demandez n'est pas possible.Dans le cas de Fragments en un ViewPager, je pourrais le faire en bloquant le bouton de recherche quand je ne suis pas sur le fragment où je veux donner une barre de recherche. Dans l'activité:
Et en cas d'absence physique d'un bouton de recherche, j'ai ajouté un point d'action dans le fragment, qui déclenchent ce code:
j'ai trouvé un travail autour 🙂
vous pouvez remplacer cette méthode (startActivity(Intent) ) dans votre BaseActivity et de vérifier ensuite si l'action est ACTION_SEARCH alors faites votre travail 😀
oui c'est possible,
veuillez implémente la Recherche de les afficher sur votre Activité ,'onQueryTextChange' en Activité permettra également d'écouter la recherche du fragment, vous pouvez vérifier le fragment de la visibilité dans 'onQueryTextChange", si elle visible, vous pouvez appeler votre méthode de recherche pour fragment, son travail parfait dans mon code