studio programacion metodo example español busqueda buscar barra android android-actionbar

android - programacion - La búsqueda de la barra de acción no se cerrará después de la búsqueda



searchview android español (2)

Después de algunas búsquedas, encuentro la solución. El onActionViewCollapsed funciona, pero tuvo un comportamiento inesperado (el icono salta a la izquierda, el indicador hacia arriba aún está aquí ...) : esta solución (difícil) se sugirió en mi primera y mi respuesta anterior , y me convenció usando el método collapseActionView . Sin embargo, SearchView.collapseActionView() no funcionaba porque, según la Documentation :

Contraer la vista de acción asociada con este elemento de menú.

Está relacionado con MenuItem y no con el widget SearchView . Es por eso que tuvo este error cuando usó este método:

El método collapseActionView () no está definido para el tipo SearchView

Entonces, la solución es crear una variable de Menu siguiente manera:

// At the top of your class private Menu mMenu; // onCreateOptionsMenu method @Override public boolean onCreateOptionsMenu(Menu menu) { this.mMenu = menu; // init the variable // other stuff.. return true; } // call the collapseActionView method public boolean onQueryTextSubmit(String query) { searchView.setIconified(true); searchView.clearFocus(); // call your request, do some stuff.. // collapse the action view if (mMenu != null) { (mMenu.findItem(R.id.menu_search2)).collapseActionView(); } return false; }

O bien, otro podría ser evitar el implemento SearchView.OnQueryTextListener y hacerlo dentro de onCreateOptionsMenu siguiente manera:

@Override // make your Menu as ''final'' variable public void onCreateOptionsMenu (final Menu menu, MenuInflater inflater) { searchView = (SearchView) menu.findItem(R.id.menu_search2).getActionView(); // call the query listener directly on the SearchView searchView.setOnQueryTextListener(new OnQueryTextListener() { @Override public boolean onQueryTextSubmit(String query) { searchView.setIconified(true); searchView.clearFocus(); // call the request here // call collapse action view on ''MenuItem'' (menu.findItem(R.id.menu_search2)).collapseActionView(); return false; } @Override public boolean onQueryTextChange(String newText) { return false; } }); searchView.setIconified(false); }

Esto resolverá el problema de seguro. ¡Feliz codificación!

Tengo una barra de acción con un icono de búsqueda. Cuando se hace clic en el icono de búsqueda, se expande a una barra de búsqueda en la que el usuario puede escribir en una búsqueda.

El problema es que cuando el usuario ingresa en la búsqueda, me gustaría que la barra de búsqueda se colapsara en un ícono, pero no puedo hacer que suceda de por vida.

El menú de mi barra de acción se ve así:

<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=".MainActivity" > <item android:id="@+id/menu_search2" android:actionViewClass="android.widget.SearchView" android:title="Search" android:icon="@android:drawable/ic_menu_search" android:showAsAction="always|collapseActionView|" android:onClick="goToSearch" /> <item android:id="@+id/action_scan" android:icon="@drawable/barcode" android:onClick="scanBarcode" android:showAsAction="ifRoom|collapseActionView" /> </menu>

Mi actividad de búsqueda se ve así:

public class Search extends Fragment implements SearchView.OnQueryTextListener, ReadJSONResult.OnArticleSelectedListener { private ListView lv; View v; SearchView searchView; private SearchView mSearchView; private MenuItem mSearchMenuItem; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { //set layout here v = inflater.inflate(R.layout.activity_search, container, false); setHasOptionsMenu(true); getActivity().setTitle("Search"); //get user information SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity()); String userName = prefs.getString("userName", null); String userID = prefs.getString("userID", null); return v; } @Override public void onCreateOptionsMenu (Menu menu, MenuInflater inflater) { // Inflate the menu; this adds items to the action bar if it is present. searchView = (SearchView) menu.findItem(R.id.menu_search2).getActionView(); searchView.setOnQueryTextListener(this); searchView.setIconified(false); } public boolean onQueryTextSubmit (String query) { //toast query //make json variables to fill searchView.setIconified(true); searchView.clearFocus(); // url to make request String url = "myURL"; try { query = URLEncoder.encode(query, "UTF-8"); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } String jsonUrl = url + query; //todo: get json ReadJSONResult task = new ReadJSONResult(getActivity()); task.setOnArticleSelectedListener(this); task.execute(jsonUrl); return false; } @Override public boolean onQueryTextChange(String newText) { // TODO Auto-generated method stub return false; } @Override public void onArticleSelected(String b, String brewery){ searchView.setIconified(true); searchView.clearFocus(); searchView.postInvalidate(); //code to execute on click Fragment Fragment_one; FragmentManager man= getFragmentManager(); FragmentTransaction tran = man.beginTransaction(); //adds beer data to shared prefs for beer tabs SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getActivity()); SharedPreferences.Editor editor = preferences.edit(); editor.putString("beerID",b); editor.putString("breweryID",brewery); editor.commit(); Fragment_one = new BeerTabs(); tran.replace(R.id.main, Fragment_one);//tran. tran.addToBackStack(null); tran.commit(); } }


Una forma más simple, que funciona incluso si el widget SearchView no está en la barra de acción es el siguiente código:

searchView.setQuery("", false); searchView.setIconified(true);

Y eso hace que SearchView se contraiga después de realizar una búsqueda.