SearchView getActionView devolver null
Esto funcionaba hace unos días, pero de repente se detuvo. Sólo quiero usar el widget de búsqueda de barra de acción cuando cierto fragmento es visible.
Ahora no puedo obtener el SearchView
, ahora getActionView
devuelve siempre null.
- Cómo administrar MediaPlayer.setVolume () + SeekBar para configurarlo + control de volumen del dispositivo
- Programa Android para acercar y alejar con la ayuda de seekbar?
- Mediaplayer actualización de progreso a seekbar no suave?
- SeekBar setProgress descarta progreso secundario
- Android SeekBar no puede ser de ancho completo incluso establecer padding 0 en AppCompat 23.1.0
Searchable.xml
<?xml version="1.0" encoding="utf-8"?> <searchable xmlns:android="http://schemas.android.com/apk/res/android" android:label="@string/app_name" android:hint="@string/search_for_places"> </searchable>
Manifest.xml
<activity android:name=".ui.activities.MainActivity" android:launchMode="singleTop"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> <action android:name="android.intent.action.SEARCH"/> </intent-filter> <meta-data android:name="android.app.searchable" android:resource="@xml/searchable"/> <meta-data android:name="android.app.default_searchable" android:value=".ui.activities.MainActivity" /> </activity>
Menu.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:myapp="http://schemas.android.com/apk/res-auto"> <item android:id="@+id/action_search_place" android:icon="@drawable/ic_2_action_search" android:orderInCategory="1" android:title="@string/title_search" myapp:showAsAction="collapseActionView|ifRoom" myapp:actionViewClass="android.support.v7.widget.SearchView"/> </menu>
El fragmento
... setHasOptionsMenu(true); ... @Override public void onCreateOptionsMenu(final Menu menu, final MenuInflater inflater) { inflater.inflate(R.menu.menu, menu); MenuItem searchItem = menu.findItem(R.id.action_search_place); mSearchView = (SearchView) MenuItemCompat.getActionView(searchItem); SearchManager searchManager = (SearchManager) getBaseActivity().getSystemService(Context.SEARCH_SERVICE); if (mSearchView != null) { mSearchView.setSearchableInfo(searchManager.getSearchableInfo(getActivity().getComponentName())); mSearchView.setIconifiedByDefault(true); mSearchView.setOnQueryTextListener(this); } super.onCreateOptionsMenu(menu, inflater); }
- SeekBar establece el espesor de la línea y el color del código
- Multiple SeekBars escucha
- ¿Cómo actualizar SeekBar no disparar OnSeekBarChangeListener?
- No se puede mover Android SeekBar con Appium
- ¿Cómo agregar TextView en medio de pulgar SeekBar?
Hoy tuve el mismo problema y creo que lo resolví. Resulta que hice un par de cosas que no eran exactamente como por el contrato de ActionBarCompat
:
- Cada actividad que utiliza
ActionBarCompat
debe extenderActionBarActivity
lugar deFragmentActivity
directamente - Cada actividad que utiliza
ActionBarCompat
debe declarar su tema como heredado de los temas deActionBarCompat
.
Los dos que encontré viendo el video de la explicación de Google.
Ahora mi searchView
ya no es null
.
Tuve el mismo problema porque en mi menú que he utilizado: android:actionViewClass="android.widget.SearchView"
según la documentación de google.
Bueno, resulta que si estoy usando AppCompatActivity debería usar app:actionViewClass="android.widget.SearchView"
lugar.
Espero que esto ayude a alguien.
Si estás usando proguard, esta es la respuesta posible: https://code.google.com/p/android/issues/detail?id=58508
En resumen, agregue debajo de la línea a su archivo de configuración proguard-rules.pro
.
-keep class android.support.v7.widget.SearchView { *; }
Lo arreglé: en el menú xml, utilicé el espacio de nombres de la aplicación:
app:showAsAction="collapseActionView|always" app:actionViewClass="android.support.v7.widget.SearchView"
El tutorial de Android, https://developer.android.com/training/search/setup.html , utiliza android: showAs y android: actionView …
Yo estaba con el mismo error. Y he hecho las siguientes cosas:
Tengo una Actividad que se extiende por FragmentActivity:
@Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.feed, menu); // 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 true; }
Searchable.xml:
<?xml version="1.0" encoding="utf-8"?> <searchable xmlns:android="http://schemas.android.com/apk/res/android" android:label="@string/app_label" android:hint="@string/search_hint" > </searchable>
Menu.xml:
<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" tools:context="br.com.srtorcedor.FeedActivity"> <item android:id="@+id/action_search" android:icon="@drawable/abc_ic_search" android:title="@string/search_title" android:showAsAction="always" android:actionViewClass="android.widget.SearchView"/> </menu>
AndroidManifest:
<activity android:name=".FeedActivity" android:icon="@drawable/ic_action_pins" android:label="@string/title_activity_feed"> <intent-filter> <action android:name="android.intent.action.SEARCH" /> </intent-filter> <meta-data android:name="android.app.searchable" android:resource="@xml/searchable" /> </activity>
¿Podría comprobar si funciona con usted?
Hoy me di cuenta de que estaba recibiendo null de la llamada getActionView () en los elementos que no tienen:
android:showAsAction="always"
Parece que de lo contrario simplemente no inflar correctamente.