¿Alguien sabe de un tutorial o un ejemplo de cómo implementar la interfaz de búsqueda estándar de Android con Fragment
s? En otras palabras, ¿es posible poner una búsqueda estándar con un SearchManager
en 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
Fragment
no 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
Fragment
no puede existir sin un padreActivity
y, 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 unActivity
no es posible, ya que requeriría cambios en el sistema subyacente . Mira el código fuente de laSearchableInfo
clase 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.SEARCH
intención y (en lugar de mostrar inmediatamente los resultados en aListView
, por ejemplo) pase la consulta de búsqueda a suFragment
correo 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
Fragment
tal como se describe en la publicación de Raghav a continuación .fuente
SearchManager
porFragment
s, ¿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
Fragment
así 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
onActivityCreated
primo 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
Fragments
usted todavía necesita usar unActivity
para controlar y asignar elFragments
. EstoActivity
puede tener la funcionalidad de búsqueda como antes.Recientemente he cambiado de una
Activity
aplicación basada en "normal" a unaFragment
aplicació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
Fragments
ampliar una interfazMyFragment
con unstartSearch
método, y que suActivity
'sstartSearch
método llamado del fragmento actualstartSearch
mé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
SearchView
para 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.java
código fuente aquí.Usa el
ActionBar
ySearchView
. Podrá manejar búsquedas sin ninguna conexión a Activity. Simplemente configure unOnQueryTextListener
en 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
Fragment
no puede existir fuera deActivity
, ni puedeFragment
vincularse a unoandroid.intent.action.SEARCH
u otrointent-filter
.Entonces, sin usar un
Activity
para 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