0

I've followed this code to implement SearchView inside ActionBar (as an item inside the menu).

But when i reach this line

mSearchView = (SearchView) menu.findItem(R.id.action_search).getActionView();

getActionView() return a null value.

I can't figure out what is wrong.

Luca
  • 823
  • 4
  • 11
  • 31
  • Do u look those links? [link](http://stackoverflow.com/questions/18407171/searchview-getactionview-returning-null) [link](http://stackoverflow.com/questions/18832890/android-nullpointerexception-on-searchview-in-action-bar/18942838#18942838) [link](http://stackoverflow.com/questions/14286768/getactionview-of-my-menuitem-return-null) – Atacan Beköz Jul 21 '15 at 13:36
  • I've took a look to that links, but nothing changed – Luca Jul 21 '15 at 13:43

2 Answers2

2

Try replacing

mSearchView = (SearchView) menu.findItem(R.id.action_search).getActionView();

with

mSearchMenuItem = menu.findItem(R.id.action_search);
mSearchView = (SearchView) MenuItemCompat.getActionView(mSearchMenuItem);
Machado
  • 14,105
  • 13
  • 56
  • 97
  • you are my saviour! For the record I have to add a note: your line works only if in menu resource you use `app:actionViewClass="android.support.v7.widget.SearchView"` – Luca Jul 21 '15 at 13:48
  • 1
    Compat mistakes are generally common. You'll get used to it. Next time you get a NullPointerException, check if this is somehow related to `AppCompat`. – Machado Jul 21 '15 at 13:49
0

Try this..

private SearchView mSearchView;

....
....

    @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
             // Inflate the menu items for use in the action bar
            MenuInflater inflater = getMenuInflater();
            inflater.inflate(R.menu.activity, menu);

            MenuItem searchItem = menu.findItem(R.id.action_search);
            mSearchView = (SearchView) searchItem.getActionView();
            setupSearchView(searchItem);

            return super.onCreateOptionsMenu(menu);
        }

        private void setupSearchView(MenuItem searchItem) {

            if (isAlwaysExpanded()) {
                mSearchView.setIconifiedByDefault(false);
            } else {
                searchItem.setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_IF_ROOM
                        | MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW);
            }

            mSearchView.setOnQueryTextListener(this);
         }

         public boolean onQueryTextChange(String newText) {

                //Query

                return false;
         }

         public boolean onQueryTextSubmit(String query) {

                //query

                return false;
         }

         public boolean onClose() {
                return false;
         }

         protected boolean isAlwaysExpanded() {
                return false;
         }

And don't forget to implement the searchview...

implements SearchView.OnQueryTextListener