Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to dismiss/close/collapse SearchView in ActionBar in MainActivity?

Tags:

I'm trying to clear and close SearchView after entering a value. I found a solution but it closes the search and won't perform any action if I try to search again.

@Override public boolean onCreateOptionsMenu(Menu menu) {     getMenuInflater().inflate(R.menu.activity_main_actions, menu);      searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();     searchView.setOnQueryTextListener(searchListener);      return super.onCreateOptionsMenu(menu); }  SearchView.OnQueryTextListener searchListener = new SearchView.OnQueryTextListener(){     @Override     public boolean onQueryTextChange(String arg0) {         return false;     }     @Override     public boolean onQueryTextSubmit(String query) {         new JsoupGetData("http://api.openweathermap.org/data/2.5/find?q="+ query + "&lang=pl").execute();         try {             searchView.onActionViewCollapsed();         }         catch(Exception ex){             ex.printStackTrace();             System.out.println(ex);         }         return true;     } }; 

I can search only for the first time. Every next time it only closes my input keyboard and does nothing. How can it be performed in a right way?

Edit. Suggested change looks like this:

        try {             searchView.setIconified(true);         } 

activity_main_actions.xml:

   <!-- Search Widget -->    <item android:id="@+id/action_search"        android:icon="@drawable/ic_action_search"        android:title="@string/action_search"        android:showAsAction="always"        android:actionViewClass="android.widget.SearchView"/> 

Edit2:

I changed showAsAction="always|collapseActionView" but it closes my app when I click the search.

I also put the listener inside OnCreateOptionsMenu to see if it changes anything:

@Override public boolean onCreateOptionsMenu(Menu menu) {     getMenuInflater().inflate(R.menu.activity_main_actions, menu);     searchMenuItem = menu.findItem(R.id.action_search);      searchView = (SearchView) searchMenuItem.getActionView();     searchView.setOnQueryTextListener(new OnQueryTextListener(){              @Override             public boolean onQueryTextChange(String arg0) {                 return false;             }              @Override             public boolean onQueryTextSubmit(String query) {                 if (searchMenuItem != null) {                     boolean closed = searchMenuItem.collapseActionView();                     Toast.makeText(getApplicationContext(), "closing: " + closed, Toast.LENGTH_SHORT).show();                 }                 new JsoupGetData("http://api.openweathermap.org/data/2.5/find?q="+ query + "&lang=pl").execute();                 return false;             }     });         return super.onCreateOptionsMenu(menu); } 

And the closed boolean is false - I don't know why. I read the doc but it tells me nothing.

Edit3:

I've read too much Internet on this subject and it is not clear for me yet. Search widget is cleared, keyboard is hidden and action is performed. The only issue is the search isn't collapsed so it covers the rest of action buttons on the ActionBar.

            @Override             public boolean onQueryTextSubmit(String query) {                 searchView.setIconified(true);                 searchView.clearFocus();                 new JsoupGetData("http://api.openweathermap.org/data/2.5/find?q="+ query + "&lang=pl").execute();                 return false;             } 

Here I read that collapseActionView() will not work, because my Search is not a view but a widget.

like image 444
Kamil Avatar asked May 29 '14 07:05

Kamil


People also ask

How do I expand SearchView?

To make the SearchView expanded by default, call setIconifiedByDefault(false) on it when you initialise it (e.g. in onCreateOptionsMenu(..) or onPrepareOptionsMenu(..) ). I've found in most cases this will give it focus automatically, but if not simply call requestFocus() on it too.


1 Answers

Use:

searchMenuItem.collapseActionView();

Instead of:

searchView.onActionViewCollapsed();

If you are using AppCompat library, then use:

MenuItemCompat.collapseActionView(searchMenuItem);

like image 66
Newinjava Avatar answered Oct 09 '22 15:10

Newinjava