¿Alguien sabe de un tutorial o un ejemplo de cómo implementar la interfaz de búsqueda estándar de Android con Fragments? En otras palabras, ¿es posible poner una búsqueda estándar con un SearchManageren un Fragmento?
java
android
sqlite
android-fragments
android-searchmanager
Cinta negra
fuente
fuente

Respuestas:
En resumen, no puedes. Hay un par de razones por las cuales
Fragmentno es posible crear una interfaz de búsqueda dentro de a .Al crear una interfaz de búsqueda, debe especificar una "actividad de búsqueda" predeterminada en su manifiesto de Android. Como estoy seguro de que sabe, a
Fragmentno puede existir sin un padreActivityy, por lo tanto, esta separación no es posible.Si ya descubrió el número 1, supongo que hizo esta pregunta con la esperanza de que haya algún "truco" mágico que pueda hacer el trabajo. Sin embargo, la documentación establece que,
El sistema interno subyacente que es responsable de proporcionar resultados de búsqueda espera un
Activity, no unFragment; por lo tanto, implementar una interfaz de búsqueda que sea completamente independiente de unActivityno es posible, ya que requeriría cambios en el sistema subyacente . Mira el código fuente de laSearchableInfoclase si no me crees :).Dicho esto, no parece que sea demasiado difícil lograr algo similar a lo que estás describiendo. Por ejemplo, puede considerar implementar su actividad de búsqueda para que acepte la
android.intent.action.SEARCHintención y (en lugar de mostrar inmediatamente los resultados en aListView, por ejemplo) pase la consulta de búsqueda a suFragmentcorreo electrónico. Por ejemplo, considere la siguiente Actividad de búsqueda:Cuando se realiza una solicitud de búsqueda, el sistema iniciará su actividad de búsqueda, realizará la consulta y pasará los resultados a alguna Actividad de contenedor (según su implementación de
doMySearch). La actividad del contenedor pasará estos resultados a la búsqueda contenidaFragment, en la que se mostrarán los resultados. La implementación requiere un poco más de trabajo de lo que probablemente esperaba, pero estoy seguro de que hay formas de hacerlo más modular, y parece que esto podría ser lo mejor que puede hacer.ps Si utiliza este enfoque, es posible que tenga que prestar especial atención a las actividades que se agregan / eliminan en la pila. Vea esta publicación para obtener más información sobre cómo se puede hacer esto.
pps También puede olvidarse por completo de la interfaz de búsqueda estándar e implementar una búsqueda simple dentro de una
Fragmenttal como se describe en la publicación de Raghav a continuación .fuente
SearchManagerporFragments, ¿verdad? (o algo así)Aquí está el ejemplo para buscar algo usando fragmentos. Espero que ayude y esto es lo que estás buscando:
fuente
Fragmentasí que no me quejaría. Felicidades! : PonQueryTextChange, no se llama al método.Es muy posible buscar en un fragmento utilizando la API estándar ActionBar SearchView ActionView. Esto también funcionará con Android 2.1 (API nivel 7) usando las clases de soporte de AppCompat v7.
En tu fragmento:
En tu menú XML
fuente
item.setShowAsAction(MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW | MenuItem.SHOW_AS_ACTION_IF_ROOM); item.setActionView(searchView);Uso de las clases de soporte de AppCompat v7. Simplemente añadiendo algo a @ David solución 's de @Rookie solución para conseguir que funcione correctamente de una manera sencilla, aquí está mi código de fragmento:
MyFragment :
Agregué el
onActivityCreatedprimo sin llamarsetHasOptionsMenu(true);el sistema no sabrá que este fragmento tiene que interactuar con el menú.luego quité la línea
inflater.inflate(R.menu.main, menu);porque duplicó los elementos del menú ya que Activity infló un menú, luego Fragment infló otro menúGracias a @David y @Rookie
fuente
Al trabajar con
Fragmentsusted todavía necesita usar unActivitypara controlar y asignar elFragments. EstoActivitypuede tener la funcionalidad de búsqueda como antes.Recientemente he cambiado de una
Activityaplicación basada en "normal" a unaFragmentaplicación basada y la funcionalidad de búsqueda funcionó igual para mí.¿Has intentado trabajar en ello y no has tenido éxito? Si es así, brinde más detalles en su pregunta.
EDITAR:
Si usted quiere tener una búsqueda fragmento específico, tiene todos sus
Fragmentsampliar una interfazMyFragmentcon unstartSearchmétodo, y que suActivity'sstartSearchmétodo llamado del fragmento actualstartSearchmétodo.fuente
Creo que lo logré: en realidad puedes usar fragmentos y agregar un ícono de búsqueda a una barra de acción para que sea posible una búsqueda dentro de los fragmentos. El truco consiste en utilizar una barra de acción, una vista de acción, un oyente, un cargador y un adaptador, por supuesto.
Esto funciona bastante bien, aunque omite por completo el mecanismo de búsqueda de la plataforma Android (pero podría completarse con algo de trabajo para encontrar lo que @Alex Lockwood describe y pasar la búsqueda a fragmentos). No reaccionaría a una intención como se esperaba en el caso de una actividad, pero funciona: los usuarios pueden buscar dentro de fragmentos.
Aquí está el código:
El archivo xml para el menú de los fragmentos de búsqueda res / menu / menu_search.xml:
Y el archivo de diseño xml res / layout / search_in_fragments.xml
fuente
SearchViewpara su biblioteca ActionBarSherlock debido a su complejidad ( vea su comentario aquí ). Como puede ver (y como describí también en mi respuesta), la implementación de búsqueda de Android es cualquier cosa menos trivial ... está arraigada en el sistema subyacente, y esto hace que incluso las bibliotecas de terceros sean difíciles de escribir (y eso es algo que dice. .. Jake Wharton es como el Chuck Norris de las bibliotecas de terceros: D).SearchView.javacódigo fuente aquí.Usa el
ActionBarySearchView. Podrá manejar búsquedas sin ninguna conexión a Activity. Simplemente configure unOnQueryTextListeneren SearchView.Consulte esta publicación para obtener más detalles sobre la búsqueda personalizada.
fuente
solución de otros ..... no me gusta eso. Esto es más fácil para mí. Pero es mi idea. Espero tu opinión.
fuente
A
Fragmentno puede existir fuera deActivity, ni puedeFragmentvincularse a unoandroid.intent.action.SEARCHu otrointent-filter.Entonces, sin usar un
Activitypara envolver elFragment, lo que estás preguntando no es posible.fuente
En el caso de Fragmentos en un ViewPager, podría hacerlo bloqueando el botón de búsqueda cuando no esté en el fragmento donde quiero dar una barra de búsqueda. En la actividad:
Y en caso de que no haya un botón de búsqueda física, agregué un elemento de acción en el fragmento, que activa este código:
fuente
encontré una solución :) puede anular este método (startActivity (Intent)) en su BaseActivity y luego verificar si la acción es ACTION_SEARCH y luego hacer su trabajo especial: D
fuente
si es posible,
implementa la vista de búsqueda en su actividad, 'onQueryTextChange' en Activity también escuchará la búsqueda en fragmentos, puede verificar la visibilidad del fragmento en 'onQueryTextChange', si está visible puede llamar a su método de búsqueda para fragmentos, funciona perfectamente en mi código
fuente