Comment puis-je capturer le clic-droit de SearchView?

Comment puis-je capturer l'événement de l'utilisateur, cliquez sur le bouton SearchView texte en cliquant sur le bouton X à droite

J'ai déjà capturé l'événement onQueryTextChange mais, pour tout changement de texte, ce n'est pas pour ce bouton X

  • Meilleur moyen de partage social dans Android
  • Android MediaPlayer getCurrentPosition () provoque le bégaiement audio
  • Build android android - pas assez de mémoire pour démarrer jvm
  • Comment charger un bitmap dans une image avec Picasso
  • Obtenir une liste des dépendances en cours d'exécution
  • Quel est le nom de fichier utilisé par les préférences partagées par défaut?
  • Emulateur Android - Problème de création de comptes utilisateur
  • Quelles sont les étapes sur onAdjustVolume du VolumeProvider?
  • Alternatives gratuites Corona SDK
  • Insuffisance des tests avec AndroidJUnitRunner 1.0.0 et AssertJ
  • Compilation de STXXL sous Android NDK r8b
  • Convertit une milliseconde en Joda Date Time ou pour la zone 0000
  • 6 Solutions collect form web for “Comment puis-je capturer le clic-droit de SearchView?”

    Après avoir essayé beaucoup de combinaisons, j'ai trouvé comment capturer l'événement derrière le bouton X dans SearchView

    Vous trouverez ci-dessous un extrait de code de la fonction onCreateOptionsMenu dans l'une de mes applications. mSearchMenu et mSearchView sont des variables globales. Le X est en fait un ImageView avec ID search_close_btn et la zone de texte est une vue EditText avec ID search_src_text

     @SuppressLint("NewApi") @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu items for use in the action bar MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.country_list_activity_actions, menu); mSearchMenu = menu.findItem(R.id.action_search); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { // Get the SearchView and set the searchable configuration SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); mSearchView = (SearchView) menu.findItem(R.id.action_search).getActionView(); // Assumes current activity is the searchable activity mSearchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); mSearchView.setIconifiedByDefault(false); // Do not iconify the widget; expand it by default // Get the search close button image view ImageView closeButton = (ImageView)mSearchView.findViewById(R.id.search_close_btn); // Set on click listener closeButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { LoggerUtils.d(LOG, "Search close button clicked"); //Find EditText view EditText et = (EditText) findViewById(R.id.search_src_text); //Clear the text from EditText view et.setText(""); //Clear query mSearchView.setQuery("", false); //Collapse the action view mSearchView.onActionViewCollapsed(); //Collapse the search widget mSearchMenu.collapseActionView(); } }); } // When using the support library, the setOnActionExpandListener() method is // static and accepts the MenuItem object as an argument mSearchMenu.setOnActionExpandListener(new OnActionExpandListener() { @Override public boolean onMenuItemActionExpand(MenuItem item) { //Nothing to do here LoggerUtils.d(LOG, "Search widget expand "); return true; // Return true to expand action view } @Override public boolean onMenuItemActionCollapse(MenuItem item) { LoggerUtils.d(LOG, "Search widget colapsed "); return true; // Return true to collapse action view } }); return super.onCreateOptionsMenu(menu); } 

    Vous pouvez simplement utiliser onCloseListener ()

     sv= (SearchView) findViewById(R.id.searchView1); sv.setOnCloseListener(new OnCloseListener() { @Override public boolean onClose() { Toast t = Toast.makeText(MainActivity.this, "close", Toast.LENGTH_SHORT); t.show(); return false; } }); 

    J'ai eu des problèmes pour essayer de trouver le composant par son ID, mais j'ai trouvé une autre façon de rechercher ce composant en utilisant le même SearchView

     // Catch event on [x] button inside search view int searchCloseButtonId = searchView.getContext().getResources() .getIdentifier("android:id/search_close_btn", null, null); ImageView closeButton = (ImageView) this.searchView.findViewById(searchCloseButtonId); // Set on click listener closeButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // Manage this event. } }); 

    J'utilise ce code pour effacer la suppression des requêtes textuelles et exécuter mes actions

     @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.search, menu); SearchView searchView = (SearchView) menu.findItem(R.id.search_button).getActionView(); SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); SearchView.OnQueryTextListener textChangeListener = new SearchView.OnQueryTextListener() { @Override public boolean onQueryTextChange(String cs) { if (TextUtils.isEmpty(cs)){ //Text is cleared, do your thing } return false; } @Override public boolean onQueryTextSubmit(String query) { //text query submitted } }; searchView.setOnQueryTextListener(textChangeListener); return true; } 

    Si vous utilisez la bibliothèque Appcompat, au lieu d'utiliser

     getResources().getIdentifier("android:id/search_close_btn", null, null); 

    tu peux le faire:

     MenuItem searchItem = menu.findItem(R.id.action_search); SearchView searchView = (SearchView) searchItem.getActionView(); View closeButton = searchView.findViewById(android.support.v7.appcompat.R.id.search_close_btn); closeButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //handle click } }); 
      ImageView closeButton = (ImageView) this.searchView.findViewById(android.support.v7.appcompat.R.id.search_close_btn); closeButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // Manage this event. } }); 

    Utilisez R.id.search_go_btn pour le bouton "Soumettre"

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.