Acabo de implementar la v7 AppCompat
biblioteca de soporte, pero MenuItemCompat.getActionView
siempre devuelve nulo en cada versión de Android que probé (4.2.2, 2.3.4 ...)
El SearchView
se muestra en la barra de acción, pero no responde a las acciones táctiles y no se expande para mostrar su, EditText
y 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.SearchView
clase 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.xml
importació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
onCreateOptionsMenu
método:Y no olvides poner en el
onCreate
método:Esto funciona muy bien para mi actividad "extendiéndose" para
FragmentActivity
yActionBarActivity
.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 elnull
valor. 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.ImageView
Si 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