Search code examples
androidandroid-fragmentssearchview

onQueryListener with SearchView not working


I am trying to set a listener on a searchview using the support library inside a Fragment but got an error: cannot find onQueryTextListener. Is there anything wrong with my code?

The onQueryTextListener definitely exists.

Java Code:

package com.example.yagamizero.myapplication;

import android.app.Fragment;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.view.MenuItemCompat;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.support.v7.widget.SearchView;

public class ArtistSearchFragment extends Fragment {
   SearchView searchView;
   public ArtistSearchFragment(){

   }
   @Override
   public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
       super.onCreate(savedInstanceState);
       getActivity().setContentView(R.layout.fragment_artist_search);
       View rootView = inflater.inflate(R.layout.fragment_artist_search, container, false);

       return rootView;
    }

    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {

        super.onCreateOptionsMenu(menu,inflater);
        MenuItem searchItem = menu.findItem(R.id.action_search);
        searchView = (android.support.v7.widget.SearchView) MenuItemCompat.getActionView(searchItem);
        searchView.setOnQueryTextListener(searchQueryListener);

    }

    private onQueryTextListener searchQueryListener = new onQueryTextListener() {
        @Override
        public boolean onQuerySubmit(String query){

            return true;
        }
        public boolean onQueryTextChange(String newText){

            return true;
        }
    };
}

Solution

  • OnQueryTextListener is a nested interface inside SearchView class, so you need define it like this:

    private SearchView.OnQueryTextListener searchQueryListener = new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String query) {
            return false;
        }
    
        @Override
        public boolean onQueryTextChange(String newText) {
            return false;
        }
    };