PDA

Ver la Versión Completa : [ CONSULTA ] Problema con Search Widget


Guixe94
14/06/14, 23:22:07
Hola, siento ser tan pesado por que llevo ya unos 3 temas creo en 3 dias..
Mi problema de hoy es con el widget para buscar.
Estoy siguiendo el siguiente tutorial: (solo el apartado "Adding Search Widget to action bar"
http://www.androidhive.info/2013/11/android-working-with-action-bar/

Y tengo un problema cuando modifico el onCreateOptionsMenu() y introduzco el siguiente codigo:

// Associate searchable configuration with the SearchView
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchView searchView = (SearchView) menu.findItem(R.id.action_search)
.getActionView();
searchView.setSearchableInfo(searchManager
.getSearchableInfo(getComponentName()));

return super.onCreateOptionsMenu(menu);

Cuando lo quito todo funciona ok lo unico que al pulsar el boton de buscar pues esta claro que no aparece nada.. pero cuando lo pongo me sale que la app dejo de funcionar.
En el log me sale la siguiente frase:

06-14 17:09:43.538 1717-1717/com.barwill94.wikicraft E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.barwill94.wikicraft, PID: 1717
java.lang.NullPointerException
at com.barwill94.wikicraft.Crafteo.onCreateOptionsMen u(Crafteo.java:70)

Que hace referencia a estas lineas del codigo:
searchView.setSearchableInfo(searchManager
.getSearchableInfo(getComponentName()));

He leido que ese error se lanza cuando alguna variable esta llegando con valor null. Pero no se como solucionarlo..

En el menu he añadido el codigo bien y he declarado que era el widget de busqueda. He creado tambien la actividad "SearchResultsActivity". He modificado el AndroidManifest.xml

He de decir que mi sdk minima era la 8, pero entonces el widget de busqueda nno funcionaba asi que la he cambiado en el build.gradle a la 11 (en el AndroidManifest también aunque ya no se use) y la he instalado en el SDK manager, no se si tengo que hacer algo mas para cambiar el sdk minimo o ya esta asi bien?
Utilizo Android Studio

Gracias por la ayudado que me habéis ido dando todos!

Saludos

kriogeN
15/06/14, 17:10:13
¿Estás usando un Theme que lleve ActionBar? Si venías de API 8 lo dudo, salvo que también lo hayas modificado o estuvieses usando el Support V7, donde se introduce la ActionBarCompat para API 7.

Si el Theme no es ActionBar no te va a funcionar ese código, y si estabas usando ActionBarCompat entonces debes usar el SearchView incluido en el Support V7 también, y no el que está en android.widget

Guixe94
15/06/14, 17:11:55
¿Estás usando un Theme que lleve ActionBar? Si venías de API 8 lo dudo, salvo que también lo hayas modificado o estuvieses usando el Support V7, donde se introduce la ActionBarCompat para API 7.

Si el Theme no es ActionBar no te va a funcionar ese código, y si estabas usando ActionBarCompat entonces debes usar el SearchView incluido en el Support V7 también, y no el que está en android.widget
estaba usando el que viene por defecto.. como puedo cambiar el theme? si pongo el holo dark o light serviran?

gracias!

kriogeN
15/06/14, 17:19:11
Si compilas para API 11 puedes usar Theme.Holo o Theme.Holo.Light, también puedes usar Theme.Holo.Light.DarkActionBar para que el tema sea blanco pero la barra negra.

Si quieres hacerla compatible con API 8 tendrá que usar el paquete de compatibilidad v7 y donde pone Theme.Holo en su lugar poner Theme.AppCompat.

EDITO: Ahmm, se me olvidaba, si usas el paquete de compatibilidad la Activity debe ser ActionBarActivity, si compilas para API 11 con que sea Activity es suficiente (el ActionBarActivity sólo existe en el paquete de soporte v7)

hoheiky
15/06/14, 17:39:46
Hola.

Yo tengo una búsqueda prácticamente igual a la tuya pero usando Fragments, y uso:

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {

super.onCreateOptionsMenu(menu, inflater);

SearchManager searchManager = (SearchManager) getActivity().getSystemService( Context.SEARCH_SERVICE );
searchView = (SearchView) menu.findItem(R.id.menu_item_search).getActionView ();
searchView.setSearchableInfo(searchManager.getSear chableInfo(getActivity().getComponentName()));
searchView.setQueryHint(getString(R.string.action_ search));
searchView.setOnQueryTextListener(this);
}

Me tiene pasado que si no llamo al super() antes de nada, el método falla. Prueba, tardas un minuto, y no vaya ser una chorrada así.

Saludos.

Guixe94
15/06/14, 21:42:41
Si compilas para API 11 puedes usar Theme.Holo o Theme.Holo.Light, también puedes usar Theme.Holo.Light.DarkActionBar para que el tema sea blanco pero la barra negra.

Si quieres hacerla compatible con API 8 tendrá que usar el paquete de compatibilidad v7 y donde pone Theme.Holo en su lugar poner Theme.AppCompat.

EDITO: Ahmm, se me olvidaba, si usas el paquete de compatibilidad la Activity debe ser ActionBarActivity, si compilas para API 11 con que sea Activity es suficiente (el ActionBarActivity sólo existe en el paquete de soporte v7)

Muchas gracias ya he cambiado el thema a Holo y ahora si que funciona! :D
Lo que al buscar en la pantalla me sale "Search Query: XXX"
peor no me salen los resultados de la busqueda..

Que tengo que añadir exactamente para que pueda buscar en una activity??

Muchas Gracias otra vez!

hoheiky
21/07/14, 14:04:22
Hola.

Yo para implementar la búsqueda en mis ListView seguí estos manuales:

http://developer.android.com/training/search/setup.html

http://developer.android.com/guide/topics/search/search-dialog.html

http://www.androidbegin.com/tutorial/implementing-actionbarsherlock-search-collapsible-view-in-android/

Espero que te sirvan de ayuda, como lo fueron para mi.

Saludos.

Guixe94
22/07/14, 00:38:33
Voy a mirarlo. Muchas gracias!