RecyclerView makes it easy to efficiently display large sets of data. You supply the data and define how each item looks, and the RecyclerView library dynamically creates the elements when they're needed.
As the name implies, RecyclerView recycles those individual elements. When an item scrolls off the screen, RecyclerView doesn't destroy its view. Instead, RecyclerView reuses the view for new items that have scrolled onscreen. This reuse vastly improves performance, improving your app's responsiveness and reducing power consumption.
In this example we will implement a search functionality for our RecyclerView so we can filter it’s items by their text. For this we will use an EditText, the setTextChangedListener method, a TextWatcher and the afterTextChanged method.
How to Step Fillter item in recyclerview android
Step1. Create example_item.xml
<?xml version="1.0" encoding="utf-8"?><android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginBottom="4dp"app:cardCornerRadius="4dp"><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:layout_margin="4dp"><ImageViewandroid:id="@+id/imageView"android:layout_width="50dp"android:layout_height="50dp"android:padding="2dp" /><TextViewandroid:id="@+id/textView"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentTop="true"android:layout_toEndOf="@+id/imageView"android:text="Line 1"android:textColor="@android:color/black"android:textSize="20sp"android:textStyle="bold" /><TextViewandroid:id="@+id/textView2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_below="@+id/textView"android:layout_marginStart="8dp"android:layout_toEndOf="@+id/imageView"android:text="Line 2"android:textSize="15sp" /></RelativeLayout></android.support.v7.widget.CardView>
Step 2. Create model class ExampleItem.java
public class ExampleItem {private int mImageResource;private String mText1;private String mText2;public ExampleItem(int imageResource, String text1, String text2) {mImageResource = imageResource;mText1 = text1;mText2 = text2;}public int getImageResource() {return mImageResource;}public String getText1() {return mText1;}public String getText2() {return mText2;}}
Step 3. Create adapter class ExampleAdapter .java
public class ExampleAdapter extends RecyclerView.Adapter<ExampleAdapter.ExampleViewHolder> {private ArrayList<ExampleItem> mExampleList;public static class ExampleViewHolder extends RecyclerView.ViewHolder {public ImageView mImageView;public TextView mTextView1;public TextView mTextView2;public ExampleViewHolder(View itemView) {super(itemView);mImageView = itemView.findViewById(R.id.imageView);mTextView1 = itemView.findViewById(R.id.textView);mTextView2 = itemView.findViewById(R.id.textView2);}}public ExampleAdapter(ArrayList<ExampleItem> exampleList) {mExampleList = exampleList;}@Overridepublic ExampleViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.example_item,parent, false);ExampleViewHolder evh = new ExampleViewHolder(v);return evh;}@Overridepublic void onBindViewHolder(ExampleViewHolder holder, int position) {ExampleItem currentItem = mExampleList.get(position);holder.mImageView.setImageResource(currentItem.getImageResource());holder.mTextView1.setText(currentItem.getText1());holder.mTextView2.setText(currentItem.getText2());}@Overridepublic int getItemCount() {return mExampleList.size();}public void filterList(ArrayList<ExampleItem> filteredList) {mExampleList = filteredList;notifyDataSetChanged();}}
Step 4. Create layout activity_main.xml
<?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"android:orientation="vertical"tools:context="com.codinginflow.searchfunctionalityexample.MainActivity"><EditTextandroid:id="@+id/edittext"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_margin="16dp"/><android.support.v7.widget.RecyclerViewandroid:id="@+id/recyclerView"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@android:color/darker_gray"android:padding="4dp"android:scrollbars="vertical" /></LinearLayout>
Step 5. Create class MainActivity.java
public class MainActivity extends AppCompatActivity {private ArrayList<ExampleItem> mExampleList;private RecyclerView mRecyclerView;private ExampleAdapter mAdapter;private RecyclerView.LayoutManager mLayoutManager;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);createExampleList();buildRecyclerView();EditText editText = findViewById(R.id.edittext);editText.addTextChangedListener(new TextWatcher() {@Overridepublic void beforeTextChanged(CharSequence s, int start, int count, int after) {}@Overridepublic void onTextChanged(CharSequence s, int start, int before, int count) {}@Overridepublic void afterTextChanged(Editable s) {filter(s.toString());}});}private void filter(String text) {ArrayList<ExampleItem> filteredList = new ArrayList<>();for (ExampleItem item : mExampleList) {if (item.getText1().toLowerCase().contains(text.toLowerCase())) {filteredList.add(item);}}mAdapter.filterList(filteredList);}private void createExampleList() {mExampleList = new ArrayList<>();mExampleList.add(new ExampleItem(R.drawable.ic_android, "One", "Line 2"));mExampleList.add(new ExampleItem(R.drawable.ic_audio, "Two", "Line 2"));mExampleList.add(new ExampleItem(R.drawable.ic_sun, "Three", "Line 2"));mExampleList.add(new ExampleItem(R.drawable.ic_android, "Four", "Line 2"));mExampleList.add(new ExampleItem(R.drawable.ic_audio, "Five", "Line 2"));mExampleList.add(new ExampleItem(R.drawable.ic_sun, "Six", "Line 2"));mExampleList.add(new ExampleItem(R.drawable.ic_android, "Seven", "Line 2"));mExampleList.add(new ExampleItem(R.drawable.ic_audio, "Eight", "Line 2"));mExampleList.add(new ExampleItem(R.drawable.ic_sun, "Nine", "Line 2"));}private void buildRecyclerView() {mRecyclerView = findViewById(R.id.recyclerView);mRecyclerView.setHasFixedSize(true);mLayoutManager = new LinearLayoutManager(this);mAdapter = new ExampleAdapter(mExampleList);mRecyclerView.setLayoutManager(mLayoutManager);mRecyclerView.setAdapter(mAdapter);}}
No comments:
Post a Comment