Ejemplo de android.support.v4.widget.SearchViewCompat?
Estoy intentando utilizar ActionBarSherlock
con ActionBarSherlock
en una aplicación de la API 8.
public boolean onCreateOptionsMenu(Menu menu) { MenuItem item = menu.add("Search") .setIcon(isLight ? R.drawable.ic_search_inverse : R.drawable.ic_search) .setActionView(R.layout.collapsible_edittext); item.setShowAsAction( MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW); // To use SearchViewCompat, I need to add it to the Menu item as well: View searchView = SearchViewCompat.newSearchView(this); // ... SearchViewCompat.setOnQueryTextListener(...); // ... item.setActionView(searchView);
Tenga en cuenta que tanto el código superior como el inferior deben llamar a setActionView()
. ¿Significa eso que no es posible hacer la búsqueda?
- Menu.findItem devuelve null
- Android - vista de búsqueda con función completa automática dentro de la barra de acción
- Obtención de excepción de conversión de clase durante el uso de android.support.v7.widget.SearchView
- Cambio del fondo dibujable del widget de búsqueda
- Buscar a través de RecyclerView usando Searchview
- SearchView en ListView con un adaptador personalizado
- Cómo colapsar completamente un SearchView después de un elemento seleccionado?
- Android - NullPointerException en SearchView en la barra de acciones
- Implementación de SearchView en la barra de acción
- Android SDK 22 - Problemas de representación de SearchView
- Biblioteca de soporte de Android 24.0.0 no muestra texto en SearchView
- El botón de la barra de acciones no se muestra en la vista de búsqueda de Android
- Expanda la vista de búsqueda para usar toda la barra de acciones (ocultar otras cosas)
Si está utilizando la versión 4.2 de ActionBarSherlock Library, puede reemplazar el Widget SearchView API 11 con un widget ActionView SearchView para que sea compatible con versiones anteriores:
Search.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/menu_search" android:icon="@drawable/ic_action_search" android:title="@string/description_search" android:orderInCategory="0" android:actionViewClass="com.actionbarsherlock.widget.SearchView" android:showAsAction="ifRoom|collapseActionView" /> </menu>
Clase de actividad
//IMPORTANT!!! import com.actionbarsherlock.widget.SearchView;
…
@Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); getSupportMenuInflater().inflate(R.menu.search, menu); setupSearchMenuItem(menu); return true; } private void setupSearchMenuItem(Menu menu) { MenuItem searchItem = menu.findItem(R.id.menu_search); if (searchItem != null) { SearchView searchView = (SearchView) searchItem.getActionView(); if (searchView != null) { SearchManager searchManager = (SearchManager) getSystemService(SEARCH_SERVICE); searchView.setSearchableInfo( searchManager.getSearchableInfo(getComponentName())); } } } }
¿Cuál es el problema real? SearchViewCompat
devolverá null
para dispositivos pre-HC ya que el widget SearchView
no existe. Esto significa que tendrá que proporcionar su propia vista de acción personalizada que imita el HC SearchView.
También puede backport el componente SearchView
de las fuentes de Android y utilizarlo.
De lo contrario, sólo puede utilizar las interfaces de búsqueda existentes Android tiene, en cuyo caso para los dispositivos HC + que utiliza la vista de acción para realizar una búsqueda, pero en dispositivos Froyo y Gingerbread el usuario hace clic en el icono de búsqueda y una barra de búsqueda anima desde la parte superior.
Espero que esto ayude.
En algún momento de su Actividad:
public class HomeActivity extends SherlockFragmentActivity implements SearchView.OnQueryTextListener { // ... SearchView searchView = (com.actionbarsherlock.widget.SearchView) actionBarCustom.findViewById(R.id.search); SearchManager sm = (SearchManager)getSystemService(SEARCH_SERVICE); searchView.setSearchableInfo(sm.getSearchableInfo(getComponentName())); searchView.setSubmitButtonEnabled(true); searchView.setOnQueryTextListener(this);
Y luego filtrar el adaptador de lista:
@Override public boolean onQueryTextSubmit(String query) { return true; } @Override public boolean onQueryTextChange(String newText) { mAdapter.getFilter().filter(newText.trim()); return false; }
De esta manera, su adaptador de lista debe implementar filtrable.
Mejor utilizar MenuItemCompat, creo que esto es útil para usted
getMenuInflater().inflate(R.menu.main, menu); MenuItem searchItem = menu.findItem(R.id.search); SearchManager searchManager =(SearchManager)getSystemService(Context.SEARCH_SERVICE); SearchView searchView = (SearchView)MenuItemCompat.getActionView(searchItem); SearchableInfo info = searchManager.getSearchableInfo(getComponentName()); searchView.setSearchableInfo(info);
- ¿Cuál es el fragmento equivalente de Activity.isFinishing ()?
- ¿Por qué el valor de tiempo de espera no es respetado por HttpURLConnection de Android?