
RecyclerView with SearchView in Android
In this Tutorial to create recyclerView with search filter. in this recyclerView used to search item in recyclerView list. i have add search in actionbar and then search data into the list item in recyclerView adapter.
RecyclerView adapter large number of data display in list. you can find easily in search filter. you can type keyword and in this keyword match in list item then display searchable item in recyclerView adapter.
Search filter is created in menu item it is display on actionbar in the app.you can click search icon then its open the input field and then write keyword you want search and then display list item in searchable.
when you can use search filter to implements Filterable class in adapter. In this class used to filter list of item in search item. this class is work on all list item in another list item stored and then find and match keyword in list item you can searchable item.
Search filter is a two method of implementation onQueryTextSubmit and then onQueryTextChange.
onQueryTextSubmit : In this method used to you can input search keyword and then enter in keyboard then display searchable item in list.it is required enter press and then display item. you can not press enter it does not show item in adapter list.
onQueryTextChange : In this method used to you can input search keyword to at a time searching for list item and then display item. it is typed one by one keyword searching for list item. it does not required enter press. it is real time searching list.
Example of RecyclerView with Search Filter
Implement Dependency in app level build.gradle file.
1 |
implementation 'com.android.support:recyclerview-v7:28.0.0 |
Create activity_main.xml File follow this code.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <android.support.v7.widget.RecyclerView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/recycler_view"/> </LinearLayout> |
Create Custom layout xml file in item_row.xml File Follow this Code.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="5dp"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <ImageView android:layout_width="100dp" android:layout_height="100dp" android:id="@+id/img_view"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:layout_gravity="center" android:textSize="20dp" android:id="@+id/text_view"/> </LinearLayout> <View android:layout_width="match_parent" android:layout_height="1dp" android:background="#000000" /> </LinearLayout> |
Create Menu in res/menu resource main_menu.xml file Follow this code.
1 2 3 4 5 6 7 8 9 10 11 12 |
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/app_bar_search" android:icon="@drawable/ic_search_black_24dp" android:title="Search" app:showAsAction="always |collapseActionView" app:actionViewClass="android.support.v7.widget.SearchView" /> </menu> |
Create FruitsData.java File Follow this Code.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
package com.example.bhaumik; public class FruitsData { public String name; public int image; public FruitsData(String name, int image) { this.name = name; this.image = image; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getImage() { return image; } public void setImage(int image) { this.image = image; } } |
Create MainActivity.java File Follow this Code.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
package com.example.bhaumik; import android.support.v4.view.MenuItemCompat; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.SearchView; import android.view.Menu; import android.view.MenuItem; import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity { RecyclerView recyclerView; MyAdapter myAdapter; List<FruitsData> list = new ArrayList<>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); list.add(new FruitsData("Apple",R.drawable.apple)); list.add(new FruitsData("Banana",R.drawable.banana)); list.add(new FruitsData("Grapes",R.drawable.grapes)); list.add(new FruitsData("JackFruit",R.drawable.jack_fruit)); list.add(new FruitsData("Lemon",R.drawable.lemon)); list.add(new FruitsData("Mango",R.drawable.mango)); list.add(new FruitsData("Orange",R.drawable.orange)); list.add(new FruitsData("Papaya",R.drawable.papaya)); list.add(new FruitsData("pear",R.drawable.pear)); list.add(new FruitsData("Pineapple",R.drawable.pine_apple)); recyclerView = findViewById(R.id.recycler_view); recyclerView.setLayoutManager(new LinearLayoutManager(this)); myAdapter = new MyAdapter(MainActivity.this,list); recyclerView.setAdapter(myAdapter); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main_menu,menu); MenuItem menuItem = menu.findItem(R.id.app_bar_search); SearchView searchView = (SearchView) MenuItemCompat.getActionView(menuItem); searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { @Override public boolean onQueryTextSubmit(String query) { return true; } @Override public boolean onQueryTextChange(String newText) { if (myAdapter != null){ myAdapter.getFilter().filter(newText); } return true; } }); return true; } } |
Create MyAdapter.java File Follow this Code.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 |
package com.example.bhaumik.recyclerviewdemo; import android.content.Context; import android.support.annotation.NonNull; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Filter; import android.widget.Filterable; import android.widget.ImageView; import android.widget.TextView; import java.util.ArrayList; import java.util.List; public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyHolder> implements Filterable { Context context; List<FruitsData> list = new ArrayList<>(); List<FruitsData> list1 = new ArrayList<>(); public MyAdapter(Context context, List<FruitsData> list) { this.context = context; this.list = list; this.list1 = list; } @NonNull @Override public MyHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) { View view = LayoutInflater.from(context).inflate(R.layout.item_list,viewGroup,false); return new MyHolder(view); } @Override public void onBindViewHolder(@NonNull MyHolder myHolder, int i) { myHolder.imageView.setImageResource(list.get(i).getImage()); myHolder.textView.setText(list.get(i).getName()); } @Override public int getItemCount() { return list.size(); } public static class MyHolder extends RecyclerView.ViewHolder{ ImageView imageView; TextView textView; public MyHolder(@NonNull View itemView) { super(itemView); imageView = itemView.findViewById(R.id.img_view); textView = itemView.findViewById(R.id.text_view); } } @Override public Filter getFilter() { return new Filter() { @Override protected FilterResults performFiltering(CharSequence constraint) { String charString = constraint.toString(); if (charString.isEmpty()){ list = list1; }else{ List<FruitsData> filterList = new ArrayList<>(); for (FruitsData data : list1){ if (data.getName().toLowerCase().contains(charString)){ filterList.add(data); } } list = filterList; } FilterResults filterResults = new FilterResults(); filterResults.values = list; return filterResults; } @Override protected void publishResults(CharSequence constraint, FilterResults results) { list = (List<FruitsData>) results.values; notifyDataSetChanged(); } }; } } |
In this Example of Create simple recyclerView with search filter functionality adding.i have create custom layout file and bind the layout in adapter. and create menu file used to create action bar search filter add you can click search icon and input keyword in search filter to display data adapter list you want to searchable.