Acabo de implementar la v7 AppCompatbiblioteca de soporte, pero MenuItemCompat.getActionViewsiempre devuelve nulo en cada versión de Android que probé (4.2.2, 2.3.4 ...)
El SearchViewse muestra en la barra de acción, pero no responde a las acciones táctiles y no se expande para mostrar su, EditTexty es como un simple icono.
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu, menu);
MenuItem searchItem = menu.findItem(R.id.action_search);
SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
if (searchView != null) {
SearchViewCompat.setOnQueryTextListener(searchView, mOnQueryTextListener);
searchView.setIconifiedByDefault(false);
Log.d(TAG,"SearchView not null");
} else
Log.d(TAG, "SearchView is null");
}
return super.onCreateOptionsMenu(menu);
}
Menu.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/action_search"
app:showAsAction="always|collapseActionView"
android:icon="@drawable/abc_ic_search"
android:title="@string/action_bar_search"
android:actionViewClass="android.support.v7.widget.SearchView"/>
<item android:id="@+id/action_refresh"
android:icon="@drawable/refresh"
android:title="@string/action_bar_refresh"
app:showAsAction="ifRoom"/>
</menu>
android
searchview
android-actionbar-compat
android-search
Mohsen Afshin
fuente
fuente

android.support.v7.widget.SearchViewclase no debe confundirse con la clase 'android.support.v4.widget.SearchViewCompat' (que se conoce como un error común al usar la biblioteca ActionBarCompat)<menu xmlns:app="http://schemas.android.com/apk/res/android" >pero obtengo un errorAttribute is missing the Android namespace prefix. ¿Lo entiendes y cómo lo arreglas?En mi caso fue el archivo ProGuard. Necesita agregar esta línea:
fuente
Para mí, una
menu.xmlimportación incorrecta de espacio de nombres causó este problema.Mi original
menu.xml:Parece que
xmlns:app="http://schemas.android.com/tools"estaba causando elMenuItemCompat.getActionView()regresonull. Cambiar esta importación paraxmlns:app="http://schemas.android.com/apk/res-auto"solucionar el problema.Nuevo trabajo
menu.xml:fuente
Creo que el problema es que usas SearchView desde el paquete Support V7 y quizás tu nivel de API esté configurado en ..... 22 ??.
Cambiando el código a lo siguiente para solucionar el problema:
menu.xml
fuente
Estaba con el mismo error, mi método
getActionView()siempre volvía nulo. Entonces, hice las siguientes cosas:Vi en algunas publicaciones que la gente está usando la aplicación: o yourapp, pero la he usado normalmente
android:ActionVewClass.En mi
onCreateOptionsMenumétodo:Y no olvides poner en el
onCreatemétodo:Esto funciona muy bien para mi actividad "extendiéndose" para
FragmentActivityyActionBarActivity.fuente
La respuesta anterior de Mohsen Afshin fue mi punto de partida e hice algunos ajustes para que funcione con mi configuración:
menu.xml
fuente
Tenía el mismo código, pero en lugar de usar la importación
android.support.v7.widget.SearchView;que estaba usandoimport android.widget.SearchView;. Esto solucionó mi problema con elnullvalor. Tan solo cambie este código en su actividad de búsqueda y funcionará y también cambiará el espacio de nombres en el archivo xml.fuente
Aquí hay un fragmento de cómo manejar searchView desde la biblioteca de soporte v7:
Además, si usa Proguard, agregue esto a su configuración:
fuente
Tuve un problema muy similar con la diferencia de que estaba tratando de usar una clase que se extendió
android.widget.ImageViewSi está utilizando ProGuard, debe especificar para permitir los métodos involucrados en esta clase.
http://proguard.sourceforge.net/manual/examples.html
Esto dice: "Permita todos los constructores necesarios que se puedan llamar desde xml y permita también cualquier configurador personalizado que use (agregue más según sea necesario)"
fuente
Lo hice por manual establecido en código Java:
Archivo de diseño:
Luego en código java:
fuente
Eliminar código: clase pública DemoActivity extiende ActionBarActivity
Reemplazar por: clase pública DemoActivity extiende actividad
fuente