SearchView.OnCloseListener does not get invoked

后端 未结 9 635
慢半拍i
慢半拍i 2020-12-03 22:23

Im using an action bar and adding a searchView to it. I have implemented the searchView.onCLoseListener but this does not seem to be getting invoked. Any suggestions ?

9条回答
  •  被撕碎了的回忆
    2020-12-03 22:46

    What I did to sort out a similar problem is I created a new class that extended SearchView:

    public class EnglishVerbSearchView extends SearchView {
    
    OnSearchViewCollapsedEventListener mSearchViewCollapsedEventListener;
    
    public EnglishVerbSearchView(Context context) {
        super(context);
    }
    
    @Override
    public void onActionViewCollapsed() {
        if (mSearchViewCollapsedEventListener != null)
            mSearchViewCollapsedEventListener.onSearchViewCollapsed();
        super.onActionViewCollapsed();
    }
    
    public interface OnSearchViewCollapsedEventListener{
        public void onSearchViewCollapsed();
    }
    
    public void setOnSearchViewCollapsedEventListener(OnSearchViewCollapsedEventListener eventListener) {
        mSearchViewCollapsedEventListener = eventListener;
    }
    
    }
    

    You can then use this class instead of SearchView in your menu xml file:

    
    
        
    
    

    And then you can add a listener in your activity:

        getMenuInflater().inflate(R.menu.dictionary, menu);
        MenuItem searchItem = menu.findItem(R.id.action_search);
        EnglishVerbSearchView searchView = (EnglishVerbSearchView)      MenuItemCompat.getActionView(searchItem);       
    
        // Get the SearchView and set the searchable configuration
        SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
        // Assumes current activity is the searchable activity
        searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
        searchView.setIconifiedByDefault(false); // Do not iconify the widget; expand it by default
    
        searchView.setOnSearchViewCollapsedEventListener(listener);
    

    You can also override other methods in your class that replaces SearchView to achieve other goals.

提交回复
热议问题