Le code sur lequel je travaille utilise une Toolbar
et gonfle un menu
.
Voici le code
private Toolbar mToolbar; mToolbar.inflateMenu(R.menu.chat_screen_menu); setupMenu (); private void setupMenu () { mMenu = mToolbar.getMenu(); if (mMenu != null) { if (mChatPager != null && mChatPager.getCurrentItem() > 0) { mMenu.setGroupVisible(R.id.menu_group_chats, true); mMenu.setGroupVisible(R.id.menu_group_contacts, false); } else { mMenu.setGroupVisible(R.id.menu_group_chats, false); mMenu.setGroupVisible(R.id.menu_group_contacts, true); mMenu.setGroupVisible(R.id.menu_group_otr_verified,false); mMenu.setGroupVisible(R.id.menu_group_otr_unverified,false); mMenu.setGroupVisible(R.id.menu_group_otr_off,false); } } mToolbar.setOnMenuItemClickListener(new OnMenuItemClickListener () { .......... } }
Mais maintenant, ils nécessitent un bouton Search
dans la tool_bar
. J’ai réussi à le mettre, j’ai suivi un guide ici Lorsque j’essaie d’écrire quelque chose à rechercher, le toast que j’avais mis à l’épreuve, l’ listener
ne l’a jamais montré. ce qui indique que l’ listener
ne fonctionne pas
@Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.chat_screen_menu, menu); SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); mSearchView = (SearchView) MenuItemCompat.getActionView(menu.findItem(R.id.action_menu_search)); final Toast toast = new Toast(mApp); if (mSearchView != null ) { mSearchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); mSearchView.setIconifiedByDefault(false); SearchView.OnQueryTextListener queryTextListener = new SearchView.OnQueryTextListener() { public boolean onQueryTextChange(Ssortingng newText) { mSearchSsortingng = newText; //doFilterAsync(mSearchSsortingng); toast.makeText(getApplicationContext(), "Test1", Toast.LENGTH_LONG).show(); return true; } public boolean onQueryTextSubmit(Ssortingng query) { mSearchSsortingng = query; //doFilterAsync(mSearchSsortingng); toast.makeText(getApplicationContext(), "Test2", Toast.LENGTH_LONG).show(); return true; } }; mSearchView.setOnQueryTextListener(queryTextListener); } return true; }
Vous devez utiliser la bibliothèque Appcompat
pour cela. Qui est utilisé comme ci-dessous:
dashboard.xml
Fichier d’activité:
public boolean onCreateOptionsMenu(Menu menu) { MenuInflater menuInflater = getMenuInflater(); menuInflater.inflate(R.menu.dashboard, menu); MenuItem searchItem = menu.findItem(R.id.action_search); SearchManager searchManager = (SearchManager) MainActivity.this.getSystemService(Context.SEARCH_SERVICE); SearchView searchView = null; if (searchItem != null) { searchView = (SearchView) searchItem.getActionView(); } if (searchView != null) { searchView.setSearchableInfo(searchManager.getSearchableInfo(MainActivity.this.getComponentName())); } return super.onCreateOptionsMenu(menu); }
fichier manifeste:
fichier xml consultable:
Et enfin, votre code de classe SearchResultsActivity
. pour afficher le résultat de votre recherche.
Si vous souhaitez configurer la fonction de recherche dans votre Fragment
, ajoutez simplement ces quelques lignes:
Étape 1 – Ajoutez le champ de recherche à votre toolbar
d’ toolbar
:
Étape 2 – Ajoutez la logique à votre onCreateOptionsMenu()
import android.support.v7.widget.SearchView; // not the default ! @Override public boolean onCreateOptionsMenu( Menu menu) { getMenuInflater().inflate( R.menu.main, menu); MenuItem myActionMenuItem = menu.findItem( R.id.action_search); searchView = (SearchView) myActionMenuItem.getActionView(); searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { @Override public boolean onQueryTextSubmit(Ssortingng query) { // Toast like print UserFeedback.show( "SearchOnQueryTextSubmit: " + query); if( ! searchView.isIconified()) { searchView.setIconified(true); } myActionMenuItem.collapseActionView(); return false; } @Override public boolean onQueryTextChange(Ssortingng s) { // UserFeedback.show( "SearchOnQueryTextChanged: " + s); return false; } }); return true; }
Si vous souhaitez l’append directement dans la barre d’outils.
SearchView
peut être ajouté comme actionView
dans le menu en utilisant
app: useActionClass = “android.support.v7.widget.SearchView”.
SearchView.OnQueryTextListener
a deux méthodes abstraites. Ainsi, votre squelette d’activité ressemblerait maintenant à ceci après avoir implémenté l’écouteur de texte SearchView.
YourActivity extends AppCompatActivity implements SearchView.OnQueryTextListener{ public boolean onQueryTextSubmit(Ssortingng query) public boolean onQueryTextChange(Ssortingng newText) }
@Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_main, menu); MenuItem searchItem = menu.findItem(R.id.searchBar); SearchView searchView = (SearchView) searchItem.getActionView(); searchView.setQueryHint("Search People"); searchView.setOnQueryTextListener(this); searchView.setIconified(false); return true; }
C’est ainsi que vous pouvez implémenter des méthodes abstraites de l’auditeur.
@Override public boolean onQueryTextSubmit(Ssortingng query) { // This method can be used when query is submitted eg. creatting search history using SQLite DB Toast.makeText(this, "Query Inserted", Toast.LENGTH_SHORT).show(); return true; } @Override public boolean onQueryTextChange(Ssortingng newText) { adapter.filter(newText); return true; }
Vous pouvez trouver votre propre logique en fonction de vos besoins. Voici l’extrait de code exemple pour afficher la liste de noms contenant le texte saisi dans SearchView
.
public void filter(Ssortingng queryText) { list.clear(); if(queryText.isEmpty()) { list.addAll(copyList); } else { for(Ssortingng name: copyList) { if(name.toLowerCase().contains(queryText.toLowerCase())) { list.add(name); } } } notifyDataSetChanged(); }
Un code de travail complet peut être trouvé> ICI
Vous pouvez également consulter le code sur SearchView avec une firebase database SQLite dans cette application musicale.