J'ai implémenté SearchView dans MaterialToolBar dans mon projet. Tout fonctionne bien sauf pour la dernière étape. Lorsque je tape quelque chose dans la barre de recherche et clique sur le bouton de recherche du clavier, rien ne s'affiche. Veuillez aider.
Vidéo de mon problème https://drive.google.com/file/0/1GpE16D8Dswn view? usp = drivesdk
Menu.xml
@Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.cart_search_menu, menu); MenuItem menuItem = menu.findItem(R.id.menu_search); SearchView searchView = (SearchView) menuItem.getActionView(); searchView.setQueryHint("Type here to search"); searchView.setMaxWidth(android.R.attr.width); searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { @Override public boolean onQueryTextSubmit(String query) { //getSearchResults(query); Also tried getSearchResults(searchView.getQuery().toString()); if( ! searchView.isIconified()) { searchView.setIconified(true); } menuItem.collapseActionView(); return false; } @Override public boolean onQueryTextChange(String newText) { return false; } }); return super.onCreateOptionsMenu(menu); }
activity.xml
<com.google.android.material.appbar.MaterialToolbar android:id="@+id/category1_toolbar" android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingEnd="10dp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" android:background="@color/dark_blue" app:menu="@menu/cart_share" tools:ignore="RtlSymmetry"> <ImageView android:id="@+id/img_back_all_category" android:layout_width="wrap_content" android:layout_height="match_parent" android:contentDescription="TODO" android:src="@drawable/ic_keyboard_arrow_left" /> <TextView android:id="@+id/tv_all_categories" android:layout_width="wrap_content" android:layout_height="match_parent" android:text="@string/product_name" android:fontFamily="@font/montserrat" android:textStyle="bold" android:textSize="20sp" android:textColor="@color/white" android:layout_marginStart="25sp"/> </com.google.android.material.appbar.MaterialToolbar>
code java
<item android:id="@+id/menu_search" android:title="@string/search" android:icon="@drawable/ic_search" app:showAsAction="always|collapseActionView" app:actionViewClass="androidx.appcompat.widget.SearchView" />
4 Réponses :
@Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.cart_search_menu, menu); SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView(); searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); searchView.setMaxWidth(Integer.MAX_VALUE); SearchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { @Override public boolean onQueryTextSubmit(String query) { // your code return false; } @Override public boolean onQueryTextChange(String query) { // your code return false; } }); return true; }
J'ai essayé ce code maintenant et avant aussi mais ne fonctionne pas dans mon cas, vérifiez la vidéo que j'ai jointe vous comprendrez le problème.
Dans logcat, il n'affiche rien en rapport avec l'erreur.
@VaibhavA Résolu ce problème encore?
Oui, amiya, j'ai résolu ce problème en échangeant deux lignes. Vérifiez ma réponse ci-dessus. Pouvez-vous me dire pourquoi cela ne fonctionnait pas?
@VaibhavUne grosse erreur. vous devez d'abord exécuter setContentView
.
Vérifiez cette capture d'écran essayez ceci
dans le fichier de menu: p >
private var searchItem : MenuItem? = null override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { inflater.inflate(R.menu.search_tenant_menu, menu) searchItem = menu.findItem(R.id.actionTenantSearch) val searchView = searchItem?.actionView as SearchView searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener { override fun onQueryTextSubmit(s: String): Boolean { CommonUtils.showToast(requireContext(), s) searchView.clearFocus() return true } override fun onQueryTextChange(s: String): Boolean { return true } }) super.onCreateOptionsMenu(menu, inflater) }
Dans le fichier kotlin:
<item android:id="@+id/actionTenantSearch" android:icon="@drawable/ic_search" android:title="@string/search" app:showAsAction="ifRoom|collapseActionView" app:actionViewClass="androidx.appcompat.widget.SearchView" />
@vaibhav avez-vous implémenté une classe filtrable dans votre listview ou recyclerview. Après cela, appelez cette méthode filtrable dans votre requête de recherche. Vous obtiendrez un résultat approprié Comme ceci,
la classe publique Adaptername étend RecyclerView.Adapter
}
CustomFilter filter;
@Override public Filter getFilter() { if (filter == null) { filter = new CustomFilter(); } return filter; } class CustomFilter extends Filter { @Override protected FilterResults performFiltering(CharSequence constraint) { // TODO Auto-generated method stub FilterResults results = new FilterResults(); if (constraint != null && constraint.length() > 0) { //CONSTARINT TO UPPER constraint = constraint.toString().toUpperCase(); ArrayList<AllInOnetItem> filters = new ArrayList<AllInOnetItem>(); //get specific items for (int i = 0; i < filterList.size(); i++) { if (filterList.get(i).getName().toUpperCase().contains(constraint)) { AllInOnetItem p = new AllInOnetItem(filterList.get(i).getName(), filterList.get(i).getNumber(),filterList.get(i).getEmail()); filters.add(p); } } results.count = filters.size(); results.values = filters; } else { results.count = filterList.size(); results.values = filterList; } return results; } @Override protected void publishResults(CharSequence constraint, FilterResults results) { // TODO Auto-generated method stub allInOnetItems = (ArrayList<AllInOnetItem>) results.values; notifyDataSetChanged(); } }
Merci, mais je n'utilise pas le filtre. Ma solution est répertoriée ci-dessus.
J'ai changé la séquence des lignes de code après cela, cela a bien fonctionné.
Avant:
super.onCreate(savedInstanceState); setContentView(R.layout.activity_product_list); Toolbar toolbar = findViewById(R.id.category1_toolbar); setSupportActionBar(toolbar);
Après: strong>
super.onCreate(savedInstanceState); Toolbar toolbar = findViewById(R.id.category1_toolbar); setSupportActionBar(toolbar); setContentView(R.layout.activity_product_list);
avez-vous ajouté
?
ouais < / code>
vérifiez mon code s'il vous plaît