Widget Recent Post No.

header ads

SearchView in Android with RecyclerView

 


Step1: build.gradle


implementation 'androidx.recyclerview:recyclerview:1.1.0'

implementation 'de.hdodenhof:circleimageview:3.1.0'


Step2: activity_main.xml


<?xml version="1.0" encoding="utf-8"?>

<androidx.constraintlayout.widget.ConstraintLayout 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:background="#FFFFFF"

    tools:context=".MainActivity">


    <androidx.recyclerview.widget.RecyclerView

        android:id="@+id/userRecycler"

        android:layout_width="0dp"

        android:layout_height="0dp"

        android:layout_marginTop="8dp"

        app:layout_constraintBottom_toBottomOf="parent"

        app:layout_constraintEnd_toEndOf="parent"

        app:layout_constraintStart_toStartOf="parent"

        app:layout_constraintTop_toBottomOf="@+id/search_bar" />


    <EditText

        android:id="@+id/search_bar"

        android:layout_width="0dp"

        android:layout_height="50dp"

        android:layout_marginStart="16dp"

        android:layout_marginTop="16dp"

        android:layout_marginEnd="16dp"

        android:background="@drawable/search"

        android:drawableStart="@drawable/ic_baseline_search_24"

        android:ems="10"

        android:hint="@string/search_your_product"

        android:inputType="textPersonName"

        android:padding="16dp"

        android:paddingStart="16dp"

        app:layout_constraintEnd_toEndOf="parent"

        app:layout_constraintStart_toStartOf="parent"

        app:layout_constraintTop_toTopOf="parent"

        android:importantForAutofill="no" />


</androidx.constraintlayout.widget.ConstraintLayout>


Step3: MainActivity.java


package in.learncodewithrk.androidxrecyclerview;

import androidx.appcompat.app.AppCompatActivity;

import androidx.recyclerview.widget.LinearLayoutManager;

import androidx.recyclerview.widget.RecyclerView;


import android.os.Bundle;

import android.text.Editable;

import android.text.TextWatcher;

import android.widget.EditText;




import java.util.ArrayList;

import java.util.List;


public class MainActivity extends AppCompatActivity {


    RecyclerView userRecycler;

    RecyclerviewAdapter recyclerviewAdapter;

    EditText searchView;

    CharSequence search="";


    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);


        searchView = findViewById(R.id.search_bar);


        List<UserData> userDataList = new ArrayList<>();

        userDataList.add(new UserData("jeans","Lorem Ipsum is simply dummy text of the printing and typesetting industry.", R.drawable.jeans));

        userDataList.add(new UserData("top","Lorem Ipsum is simply dummy text of the printing and typesetting industry.", R.drawable.top));

        userDataList.add(new UserData("shoes","Lorem Ipsum is simply dummy text of the printing and typesetting industry.", R.drawable.shoes));

        userDataList.add(new UserData("vegetable","Lorem Ipsum is simply dummy text of the printing and typesetting industry.", R.drawable.vegetable));

        userDataList.add(new UserData("fruit","Lorem Ipsum is simply dummy text of the printing and typesetting industry.", R.drawable.fruit));

        userDataList.add(new UserData("chicken","Lorem Ipsum is simply dummy text of the printing and typesetting industry.", R.drawable.chicken));

        userDataList.add(new UserData("fish","Lorem Ipsum is simply dummy text of the printing and typesetting industry.", R.drawable.fish));

        userDataList.add(new UserData("top","Lorem Ipsum is simply dummy text of the printing and typesetting industry.", R.drawable.top));

        userDataList.add(new UserData("shoes","Lorem Ipsum is simply dummy text of the printing and typesetting industry.", R.drawable.shoes));

        userDataList.add(new UserData("fruit","Lorem Ipsum is simply dummy text of the printing and typesetting industry.", R.drawable.fruit));

        userDataList.add(new UserData("chicken","Lorem Ipsum is simply dummy text of the printing and typesetting industry.", R.drawable.chicken));

        userDataList.add(new UserData("vegetable","Lorem Ipsum is simply dummy text of the printing and typesetting industry.", R.drawable.vegetable));

        userDataList.add(new UserData("fruit","Lorem Ipsum is simply dummy text of the printing and typesetting industry.", R.drawable.fruit));

        userDataList.add(new UserData("fish","Lorem Ipsum is simply dummy text of the printing and typesetting industry.", R.drawable.fish));

        userDataList.add(new UserData("top","Lorem Ipsum is simply dummy text of the printing and typesetting industry.", R.drawable.top));

        userDataList.add(new UserData("shoes","Lorem Ipsum is simply dummy text of the printing and typesetting industry.", R.drawable.shoes));




        setUserRecycler(userDataList);



        searchView.addTextChangedListener(new TextWatcher() {

            @Override

            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {


            }


            @Override

            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {


                recyclerviewAdapter.getFilter().filter(charSequence);

                search = charSequence;

            }


            @Override

            public void afterTextChanged(Editable editable) {


            }

        });


    }


    private  void  setUserRecycler(List<UserData> userDataList){

        userRecycler = findViewById(R.id.userRecycler);

        RecyclerView.LayoutManager layoutManager= new LinearLayoutManager(this, RecyclerView.VERTICAL, false);

        userRecycler.setLayoutManager(layoutManager);

        recyclerviewAdapter = new RecyclerviewAdapter(this, userDataList);

        userRecycler.setAdapter(recyclerviewAdapter);

    }


}

Step4: RecyclerviewAdapter.java

package in.learncodewithrk.androidxrecyclerview;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Filter;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;



import java.util.ArrayList;
import java.util.List;

import de.hdodenhof.circleimageview.CircleImageView;

public class RecyclerviewAdapter extends RecyclerView.Adapter<RecyclerviewAdapter.RecyclerviewHolder> {

    Context context;
    List<UserData> userDataList;
    List<UserData> filteredUserDataList;

    public RecyclerviewAdapter(Context context, List<UserData> userDataList) {
        this.context = context;
        this.userDataList = userDataList;
        this.filteredUserDataList = userDataList;
    }

    public RecyclerviewAdapter(MainActivity context, List<android.service.autofill.UserData> userDataList) {
    }

    @NonNull
    @Override
    public RecyclerviewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

        View view = LayoutInflater.from(context).inflate(R.layout.recyclerview_row_item, parent, false);
        return new RecyclerviewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull RecyclerviewHolder holder, int position) {

        holder.userName.setText(filteredUserDataList.get(position).getUserName());
        holder.userDesc.setText(filteredUserDataList.get(position).getDescp());
        holder.userImage.setImageResource(filteredUserDataList.get(position).getImageUrl());

        ItemAnimation.animateFadeIn(holder.itemView, position);


    }

    @Override
    public int getItemCount() {
        return filteredUserDataList.size();
    }

    public static final class RecyclerviewHolder extends RecyclerView.ViewHolder {


        CircleImageView userImage;
        TextView userName, userDesc;

        public RecyclerviewHolder(@NonNull View itemView) {
            super(itemView);

            userImage = itemView.findViewById(R.id.userImage);
            userName = itemView.findViewById(R.id.userName);
            userDesc = itemView.findViewById(R.id.userDesc);


        }
    }

    public Filter getFilter(){

        return new Filter() {
            @Override
            protected FilterResults performFiltering(CharSequence charSequence) {

                String Key = charSequence.toString();
                if(Key.isEmpty()){
                    filteredUserDataList = userDataList;
                }
                else{

                    List<UserData> lstFiltered = new ArrayList<>();
                    for(UserData row: userDataList){
                        if(row.getUserName().toLowerCase().contains(Key.toLowerCase())){
                            lstFiltered.add(row);

                        }
                    }

                    filteredUserDataList = lstFiltered;
                }

                FilterResults filterResults = new FilterResults();
                filterResults.values = filteredUserDataList;
                return filterResults;
            }

            @Override
            protected void publishResults(CharSequence charSequence, FilterResults filterResults) {

                filteredUserDataList = (List<UserData>)filterResults.values;
                notifyDataSetChanged();

            }
        };

    }


}

Step5: UserData.java 

package in.learncodewithrk.androidxrecyclerview;

public class UserData {
    String userName;
    String descp;
    Integer imageUrl;

    public UserData(String userName, String descp, Integer imageUrl) {
        this.userName = userName;
        this.descp = descp;
        this.imageUrl = imageUrl;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getDescp() {
        return descp;
    }

    public void setDescp(String descp) {
        this.descp = descp;
    }

    public Integer getImageUrl() {
        return imageUrl;
    }

    public void setImageUrl(Integer imageUrl) {
        this.imageUrl = imageUrl;
    }
}


Step6: ItemAnimation.java

package in.learncodewithrk.androidxrecyclerview;

import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.view.View;

public class ItemAnimation {


    /* animation duration */
    private static final long DURATION_IN_BOTTOM_UP = 150;
    private static final long DURATION_IN_FADE_ID = 500;
    private static final long DURATION_IN_LEFT_RIGHT = 150;
    private static final long DURATION_IN_RIGHT_LEFT = 150;


    public static void animateBottomUp(View view, int position) {
        boolean not_first_item = position == -1;
        position = position + 1;
        view.setTranslationY(not_first_item ? 800 : 500);
        view.setAlpha(0.f);
        AnimatorSet animatorSet = new AnimatorSet();
        ObjectAnimator animatorTranslateY = ObjectAnimator.ofFloat(view, "translationY", not_first_item ? 800 : 500, 0);
        ObjectAnimator animatorAlpha = ObjectAnimator.ofFloat(view, "alpha", 1.f);
        animatorTranslateY.setStartDelay(not_first_item ? 0 : (position * DURATION_IN_BOTTOM_UP));
        animatorTranslateY.setDuration((not_first_item ? 3 : 1) * DURATION_IN_BOTTOM_UP);
        animatorSet.playTogether(animatorTranslateY, animatorAlpha);
        animatorSet.start();
    }

    public static void animateFadeIn(View view, int position) {
        boolean not_first_item = position == -1;
        position = position + 1;
        view.setAlpha(0.f);
        AnimatorSet animatorSet = new AnimatorSet();
        ObjectAnimator animatorAlpha = ObjectAnimator.ofFloat(view, "alpha", 0.f, 0.5f, 1.f);
        ObjectAnimator.ofFloat(view, "alpha", 0.f).start();
        animatorAlpha.setStartDelay(not_first_item ? DURATION_IN_FADE_ID / 2 : (position * DURATION_IN_FADE_ID / 3));
        animatorAlpha.setDuration(DURATION_IN_FADE_ID);
        animatorSet.play(animatorAlpha);
        animatorSet.start();
    }

    public static void animateLeftRight(View view, int position) {
        boolean not_first_item = position == -1;
        position = position + 1;
        view.setTranslationX(-400f);
        view.setAlpha(0.f);
        AnimatorSet animatorSet = new AnimatorSet();
        ObjectAnimator animatorTranslateY = ObjectAnimator.ofFloat(view, "translationX", -400f, 0);
        ObjectAnimator animatorAlpha = ObjectAnimator.ofFloat(view, "alpha", 1.f);
        ObjectAnimator.ofFloat(view, "alpha", 0.f).start();
        animatorTranslateY.setStartDelay(not_first_item ? DURATION_IN_LEFT_RIGHT : (position * DURATION_IN_LEFT_RIGHT));
        animatorTranslateY.setDuration((not_first_item ? 2 : 1) * DURATION_IN_LEFT_RIGHT);
        animatorSet.playTogether(animatorTranslateY, animatorAlpha);
        animatorSet.start();
    }

    public static void animateRightLeft(View view, int position) {
        boolean not_first_item = position == -1;
        position = position + 1;
        view.setTranslationX(view.getX() + 400);
        view.setAlpha(0.f);
        AnimatorSet animatorSet = new AnimatorSet();
        ObjectAnimator animatorTranslateY = ObjectAnimator.ofFloat(view, "translationX", view.getX() + 400, 0);
        ObjectAnimator animatorAlpha = ObjectAnimator.ofFloat(view, "alpha", 1.f);
        ObjectAnimator.ofFloat(view, "alpha", 0.f).start();
        animatorTranslateY.setStartDelay(not_first_item ? DURATION_IN_RIGHT_LEFT : (position * DURATION_IN_RIGHT_LEFT));
        animatorTranslateY.setDuration((not_first_item ? 2 : 1) * DURATION_IN_RIGHT_LEFT);
        animatorSet.playTogether(animatorTranslateY, animatorAlpha);
        animatorSet.start();
    }




}

Step7: recyclerview_row_item.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <de.hdodenhof.circleimageview.CircleImageView
        android:id="@+id/userImage"
        android:layout_width="66dp"
        android:layout_height="64dp"
        android:layout_marginStart="16dp"
        android:layout_marginTop="8dp"
        android:layout_marginBottom="8dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:srcCompat="@drawable/ic_launcher_background"
        android:layout_marginLeft="16dp" />

    <TextView
        android:id="@+id/userName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="16dp"
        android:text="TextView"
        android:textColor="#000000"
        android:textStyle="bold"
        app:layout_constraintStart_toEndOf="@+id/userImage"
        app:layout_constraintTop_toTopOf="@+id/userImage"
        android:layout_marginLeft="16dp" />

    <TextView
        android:id="@+id/userDesc"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:layout_marginEnd="16dp"
        android:text="TextView"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="@+id/userName"
        app:layout_constraintTop_toBottomOf="@+id/userName" />

    <View
        android:layout_width="0dp"
        android:layout_height="1dp"
        android:layout_marginTop="16dp"
        android:layout_marginEnd="16dp"
        android:background="@android:color/darker_gray"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="@+id/userDesc"
        app:layout_constraintTop_toBottomOf="@+id/userDesc"
        android:layout_marginRight="16dp" />

</androidx.constraintlayout.widget.ConstraintLayout>
 


Post a Comment

0 Comments