web-dev-qa-db-fra.com

comment écouter le bouton de recherche du clavier dans searchView

J'ai un SearchView. Lorsque l'utilisateur clique sur le bouton keyboard search, je dois passer un appel au serveur. À quoi ressemble le code de l'auditeur? Je pense que je dois utiliser OnClickListener. Mais le code interne permettant de savoir que c’est le bouton de recherche, je ne sais pas comment le déterminer.

13
learner

J'ai fait comme ça

la onQueryTextSubmit est la méthode que vous recherchez.

définissez setOnQueryTextListener sur votre vue de recherche.

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);

    MenuItem searchItem = menu.findItem(R.id.search_city);
    searchView = (SearchView) searchItem.getActionView();
    searchView.setQueryHint("Search View Hint");

    searchView.setOnQueryTextListener(new OnQueryTextListener() {

        @Override
        public boolean onQueryTextChange(String newText) {
            //Log.e("onQueryTextChange", "called");
            return false;
        }

        @Override
        public boolean onQueryTextSubmit(String query) {


            // Do your task here

            return false;
        }

    });

    return true;
}

espérons que cette aide

59
Qadir Hussain

Ici tu peux aller pour la meilleure réponse Android pas Kotlin

        binding.edtSearch.setOnEditorActionListener(new TextView.OnEditorActionListener() {
        @Override
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
            if (actionId == EditorInfo.IME_ACTION_SEARCH) {
                // Your piece of code on keyboard search click
                if (AppValidator.isValid(SearchEventsActivity.this, binding.edtSearch, "Please enter your search keyword.")) {
                    searchKeyword = binding.edtSearch.getText().toString().trim();
                    //Search Events categories
                    callSearchEventsApi();
                }

                return true;
            }
            return false;
        }
    });

Assurez-vous d'avoir ajouté la ligne suivante dans votre EditText

Android:imeOptions="actionSearch"

Juste comme suit: -

 <EditText
                Android:id="@+id/edtSearch"
                Android:layout_width="0dp"
                Android:layout_height="wrap_content"
                Android:layout_weight="1"
                Android:layout_marginLeft="@dimen/_15dp"
                Android:background="@null"
                Android:fontFamily="@font/roboto_regular"
                Android:textColorHint="@color/text_color_light"
                Android:layout_gravity="center"
                Android:textSize="@dimen/_16sp"
                Android:maxLines="1"
                Android:singleLine="true"
                Android:imeOptions="actionSearch"
                Android:hint="@string/search"/>

J'espère que cela vous aidera à résoudre votre problème. !!!!

1
Karanvir Singh

Ceci est la version kotlin:

        searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener {

            override fun onQueryTextChange(s: String): Boolean {
                // make a server call
                return true
            }

            override fun onQueryTextSubmit(s: String): Boolean {
                val intent = Intent(applicationContext, YourSearchableActivity::class.Java)
                intent.putExtra(SearchManager.QUERY, s)
                intent.putExtra(CUSTOM_MESSAGE, "you can also add custom message when submitting the search action")
                intent.setAction(Intent.ACTION_SEARCH)
                startActivity(intent)
                return true
            }
        })
0
arjunaskykok

Méthode SearchView 

setOnQueryTextLister

fera votre travail comme indiqué ci-dessous.

searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String query) {
                showSnackBar(query.toString());
                return false;
            }

            @Override
            public boolean onQueryTextChange(String newText) {
                return false;
            }
        });

Ici, searchView est un objet de SearchView.

0
DjP