actionBar 中的 SearchView

SearchView in actionBar

我已经按照 this 代码在 ActionBar 中实现 SearchView(作为菜单中的一个项目)。

但是当我到达这条线时

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

getActionView() return 一个 null 值。

我不知道哪里出了问题。

试试这个..

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;
         }

并且不要忘记实现搜索视图...

implements SearchView.OnQueryTextListener

尝试替换

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

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