SearchView in Toolbar in Android Android by Rajesh Kumar Sahanee - March 23, 2020April 14, 20200 Post Views: 5,779 Hello Friends, today we’ll see an example of SearchView in toolbar in Android. Actually friends, I was developing an android app for one of my client in which there was a list of users showing in the recyclerview and a very simple search option was required by the client. This is very basic search option but very useful so I have created separate sample project to share. So, here is the code MainActivity.java MainActivity.java Java package com.zatackcoder.searchviewintoolbar; import android.app.SearchManager; import android.content.Context; import android.os.Bundle; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.widget.SearchView; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity { List<Item> items = new ArrayList<>(); private RecyclerView mRecyclerView; private RecyclerView.Adapter mAdapter; private RecyclerView.LayoutManager mLayoutManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mRecyclerView = findViewById(R.id.recycler_view); mRecyclerView.setHasFixedSize(true); mLayoutManager = new LinearLayoutManager(this); mRecyclerView.setLayoutManager(mLayoutManager); items.add(new Item("Item 1", "Red", 10, 100.00)); items.add(new Item("Item 2", "Red", 12, 100.00)); items.add(new Item("Item 3", "Red", 14, 100.00)); items.add(new Item("Item 4", "Red", 16, 150.00)); items.add(new Item("Item 5", "Red", 18, 170.00)); items.add(new Item("Item 6", "Green", 20, 190.00)); items.add(new Item("Item 7", "Green", 10, 100.00)); items.add(new Item("Item 8", "Green", 12, 200.00)); items.add(new Item("Item 9", "Green", 14, 210.00)); items.add(new Item("Item 10", "Green", 16, 240.00)); items.add(new Item("Item 11", "Blue", 18, 250.00)); items.add(new Item("Item 12", "Blue", 20, 280.00)); items.add(new Item("Item 13", "Blue", 10, 300.00)); items.add(new Item("Item 14", "Blue", 12, 150.00)); items.add(new Item("Item 15", "White", 10, 170.00)); mAdapter = new ItemAdapter(getApplicationContext(), items); mRecyclerView.setAdapter(mAdapter); } public boolean onCreateOptionsMenu(Menu menu) { MenuInflater menuInflater = getMenuInflater(); menuInflater.inflate(R.menu.menu_main_activity, menu); MenuItem searchItem = menu.findItem(R.id.action_search); SearchManager searchManager = (SearchManager) getApplicationContext().getSystemService(Context.SEARCH_SERVICE); SearchView searchView = null; if (searchItem != null) { searchView = (SearchView) searchItem.getActionView(); } if (searchView != null) { searchView.setSearchableInfo(searchManager.getSearchableInfo(MainActivity.this.getComponentName())); searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { public boolean onQueryTextChange(String newText) { List<Item> newList = new ArrayList<>(); for (Item item : items) { if (item.getName().toLowerCase().contains(newText.toLowerCase()) || item.getColor().toLowerCase().contains(newText.toLowerCase()) || String.valueOf(item.getSize()).contains(newText) || String.valueOf(item.getPrice()).contains(newText)) { newList.add(item); } } mAdapter = new ItemAdapter(getApplicationContext(), newList); mRecyclerView.setAdapter(mAdapter); return true; } public boolean onQueryTextSubmit(String query) { return true; } }); } return super.onCreateOptionsMenu(menu); } } 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 package com.zatackcoder.searchviewintoolbar; import android.app.SearchManager;import android.content.Context;import android.os.Bundle;import android.view.Menu;import android.view.MenuInflater;import android.view.MenuItem; import androidx.appcompat.app.AppCompatActivity;import androidx.appcompat.widget.SearchView;import androidx.recyclerview.widget.LinearLayoutManager;import androidx.recyclerview.widget.RecyclerView; import java.util.ArrayList;import java.util.List; public class MainActivity extends AppCompatActivity { List<Item> items = new ArrayList<>(); private RecyclerView mRecyclerView; private RecyclerView.Adapter mAdapter; private RecyclerView.LayoutManager mLayoutManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mRecyclerView = findViewById(R.id.recycler_view); mRecyclerView.setHasFixedSize(true); mLayoutManager = new LinearLayoutManager(this); mRecyclerView.setLayoutManager(mLayoutManager); items.add(new Item("Item 1", "Red", 10, 100.00)); items.add(new Item("Item 2", "Red", 12, 100.00)); items.add(new Item("Item 3", "Red", 14, 100.00)); items.add(new Item("Item 4", "Red", 16, 150.00)); items.add(new Item("Item 5", "Red", 18, 170.00)); items.add(new Item("Item 6", "Green", 20, 190.00)); items.add(new Item("Item 7", "Green", 10, 100.00)); items.add(new Item("Item 8", "Green", 12, 200.00)); items.add(new Item("Item 9", "Green", 14, 210.00)); items.add(new Item("Item 10", "Green", 16, 240.00)); items.add(new Item("Item 11", "Blue", 18, 250.00)); items.add(new Item("Item 12", "Blue", 20, 280.00)); items.add(new Item("Item 13", "Blue", 10, 300.00)); items.add(new Item("Item 14", "Blue", 12, 150.00)); items.add(new Item("Item 15", "White", 10, 170.00)); mAdapter = new ItemAdapter(getApplicationContext(), items); mRecyclerView.setAdapter(mAdapter); } public boolean onCreateOptionsMenu(Menu menu) { MenuInflater menuInflater = getMenuInflater(); menuInflater.inflate(R.menu.menu_main_activity, menu); MenuItem searchItem = menu.findItem(R.id.action_search); SearchManager searchManager = (SearchManager) getApplicationContext().getSystemService(Context.SEARCH_SERVICE); SearchView searchView = null; if (searchItem != null) { searchView = (SearchView) searchItem.getActionView(); } if (searchView != null) { searchView.setSearchableInfo(searchManager.getSearchableInfo(MainActivity.this.getComponentName())); searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { public boolean onQueryTextChange(String newText) { List<Item> newList = new ArrayList<>(); for (Item item : items) { if (item.getName().toLowerCase().contains(newText.toLowerCase()) || item.getColor().toLowerCase().contains(newText.toLowerCase()) || String.valueOf(item.getSize()).contains(newText) || String.valueOf(item.getPrice()).contains(newText)) { newList.add(item); } } mAdapter = new ItemAdapter(getApplicationContext(), newList); mRecyclerView.setAdapter(mAdapter); return true; } public boolean onQueryTextSubmit(String query) { return true; } }); } return super.onCreateOptionsMenu(menu); }} activity_main.xml activity_main.xml XHTML <?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <androidx.recyclerview.widget.RecyclerView android:id="@+id/recycler_view" android:layout_width="match_parent" android:layout_height="match_parent" tools:layout_editor_absoluteX="0dp" tools:layout_editor_absoluteY="0dp" /> </androidx.constraintlayout.widget.ConstraintLayout> 123456789101112131415 <?xml version="1.0" encoding="utf-8"?><androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <androidx.recyclerview.widget.RecyclerView android:id="@+id/recycler_view" android:layout_width="match_parent" android:layout_height="match_parent" tools:layout_editor_absoluteX="0dp" tools:layout_editor_absoluteY="0dp" /> </androidx.constraintlayout.widget.ConstraintLayout> menu_main_activity.xml menu_main_activity.xml XHTML <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <item android:id="@+id/action_search" android:icon="@android:drawable/ic_menu_search" android:title="Search" app:actionViewClass="androidx.appcompat.widget.SearchView" app:showAsAction="always|collapseActionView" /> </menu> 12345678910 <?xml version="1.0" encoding="utf-8"?><menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <item android:id="@+id/action_search" android:icon="@android:drawable/ic_menu_search" android:title="Search" app:actionViewClass="androidx.appcompat.widget.SearchView" app:showAsAction="always|collapseActionView" /></menu> ItemAdapter.java ItemAdapter.java Java package com.zatackcoder.searchviewintoolbar; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import android.widget.Toast; import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; import java.util.List; public class ItemAdapter extends RecyclerView.Adapter<ItemAdapter.MyViewHolder> { private Context context; private List<Item> items; public ItemAdapter(Context context, List<Item> items) { this.context = context; this.items = items; } @NonNull @Override public MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int position) { View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.list_item, viewGroup, false); MyViewHolder mvh = new MyViewHolder(view); return mvh; } @Override public void onBindViewHolder(@NonNull final MyViewHolder myViewHolder, final int position) { myViewHolder.container.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String message = "You clicked on " + items.get(position).getName() + " - color:" + items.get(position).getColor() + " | size:" + items.get(position).getSize() + " | price:" + items.get(position).getPrice(); Toast.makeText(context, message, Toast.LENGTH_LONG).show(); } }); myViewHolder.name.setText(items.get(position).getName()); myViewHolder.color.setText("Color: " + items.get(position).getColor()); myViewHolder.size.setText("Size: " + items.get(position).getSize()); myViewHolder.price.setText("Price: " + items.get(position).getPrice()); } @Override public int getItemCount() { return items.size(); } public static class MyViewHolder extends RecyclerView.ViewHolder { View container; TextView name; TextView color; TextView size; TextView price; public MyViewHolder(View view) { super(view); container = view; name = view.findViewById(R.id.name); color = view.findViewById(R.id.color); size = view.findViewById(R.id.size); price = view.findViewById(R.id.price); } } } 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 package com.zatackcoder.searchviewintoolbar; import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.TextView;import android.widget.Toast; import androidx.annotation.NonNull;import androidx.recyclerview.widget.RecyclerView; import java.util.List; public class ItemAdapter extends RecyclerView.Adapter<ItemAdapter.MyViewHolder> { private Context context; private List<Item> items; public ItemAdapter(Context context, List<Item> items) { this.context = context; this.items = items; } @NonNull @Override public MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int position) { View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.list_item, viewGroup, false); MyViewHolder mvh = new MyViewHolder(view); return mvh; } @Override public void onBindViewHolder(@NonNull final MyViewHolder myViewHolder, final int position) { myViewHolder.container.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String message = "You clicked on " + items.get(position).getName() + " - color:" + items.get(position).getColor() + " | size:" + items.get(position).getSize() + " | price:" + items.get(position).getPrice(); Toast.makeText(context, message, Toast.LENGTH_LONG).show(); } }); myViewHolder.name.setText(items.get(position).getName()); myViewHolder.color.setText("Color: " + items.get(position).getColor()); myViewHolder.size.setText("Size: " + items.get(position).getSize()); myViewHolder.price.setText("Price: " + items.get(position).getPrice()); } @Override public int getItemCount() { return items.size(); } public static class MyViewHolder extends RecyclerView.ViewHolder { View container; TextView name; TextView color; TextView size; TextView price; public MyViewHolder(View view) { super(view); container = view; name = view.findViewById(R.id.name); color = view.findViewById(R.id.color); size = view.findViewById(R.id.size); price = view.findViewById(R.id.price); } } } list_item.xml list_item.xml XHTML <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="5dp" android:background="#ffffff" android:clickable="true" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:background="?android:attr/selectableItemBackground" android:orientation="vertical" android:padding="5dp"> <TextView android:id="@+id/name" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Name" android:textFontWeight="bold" android:textSize="15dp" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <TextView android:id="@+id/color" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Color: Red" android:textSize="12dp" /> <View android:layout_width="1dp" android:layout_height="match_parent" android:layout_margin="5dp" android:background="#ADABAB" /> <TextView android:id="@+id/size" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Size: 10" android:textSize="12dp" /> <View android:layout_width="1dp" android:layout_height="match_parent" android:layout_margin="5dp" android:background="#ADABAB" /> <TextView android:id="@+id/price" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Price: 100" android:textSize="12dp" /> </LinearLayout> </LinearLayout> </LinearLayout> 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 <?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="5dp" android:background="#ffffff" android:clickable="true" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:background="?android:attr/selectableItemBackground" android:orientation="vertical" android:padding="5dp"> <TextView android:id="@+id/name" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Name" android:textFontWeight="bold" android:textSize="15dp" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <TextView android:id="@+id/color" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Color: Red" android:textSize="12dp" /> <View android:layout_width="1dp" android:layout_height="match_parent" android:layout_margin="5dp" android:background="#ADABAB" /> <TextView android:id="@+id/size" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Size: 10" android:textSize="12dp" /> <View android:layout_width="1dp" android:layout_height="match_parent" android:layout_margin="5dp" android:background="#ADABAB" /> <TextView android:id="@+id/price" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Price: 100" android:textSize="12dp" /> </LinearLayout> </LinearLayout> </LinearLayout> Item.java Item.java Java package com.zatackcoder.searchviewintoolbar; public class Item { private String name; private String color; private Integer size; private Double price; public Item(String name, String color, Integer size, Double price) { this.name = name; this.color = color; this.size = size; this.price = price; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getColor() { return color; } public void setColor(String color) { this.color = color; } public Integer getSize() { return size; } public void setSize(Integer size) { this.size = size; } public Double getPrice() { return price; } public void setPrice(Double price) { this.price = price; } } 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 package com.zatackcoder.searchviewintoolbar; public class Item { private String name; private String color; private Integer size; private Double price; public Item(String name, String color, Integer size, Double price) { this.name = name; this.color = color; this.size = size; this.price = price; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getColor() { return color; } public void setColor(String color) { this.color = color; } public Integer getSize() { return size; } public void setSize(Integer size) { this.size = size; } public Double getPrice() { return price; } public void setPrice(Double price) { this.price = price; }} Video https://zatackcoder.com/wp-content/uploads/2020/03/searchview-in-toolbar.mp4 AndroidStudio Project Download SearchViewInToolbar AndroidStudio Project 1 file(s) 9.48 MB Download Thanks for Stoping by If you find this helpful then please do share