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