0

How to search and highlight Text in Recyclerview like Whatsapp.

I have data in recyclerview from Firebase Realtime Database. I am first loading data in adapter and then listening adapter in Main activity.

I want to highlight the text in the view in recyclerview with the searched keyword from Searchbar like WhatsApp doing. I don't know how to do this. Please help me in this.

Here is my Code:

This is my DealsAdapter

public class DealsAdapter extends FirebaseRecyclerAdapter<DealsModel, DealsAdapter.ViewHolder> {

    public DealsAdapter(FirebaseRecyclerOptions<DealsModel> options) {
        super(options);
    }

    public class ViewHolder extends RecyclerView.ViewHolder {

        ImageView img;
        TextView tvData, tvTime;
        ImageButton btnShare;

        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            img = (ImageView) itemView.findViewById(R.id.img1);
            tvData = (TextView) itemView.findViewById(R.id.tvData);
            tvTime = (TextView) itemView.findViewById(R.id.tvTime);
            btnShare = (ImageButton) itemView.findViewById(R.id.btnShare);
        }
    }

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

        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.deals_card, parent, false);
        return new ViewHolder(v);
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position, DealsModel model) {

        holder.tvData.setText(model.getData());

        holder.tvData.setMovementMethod(BetterLinkMovementMethod.getInstance());
        Linkify.addLinks(holder.tvData, Linkify.WEB_URLS);

        long longTime = model.getTime();
        String dateTime = Utility.getStringDate(longTime, "MMMM dd | hh:mm aa");
        holder.tvTime.setText(dateTime);

        String type = model.getType();
        String imgurl = "https://......." + type + ".png";

        ImageView holderImg = holder.img;


        //Try to load image from cache
        Picasso.get()
                .load(model.getType())
                .networkPolicy(NetworkPolicy.OFFLINE).placeholder(R.drawable.defaultt)
                .placeholder(R.drawable.defaultt)
                .error(R.drawable.defaultt)
                .into(holder.img, new Callback() {
                    @Override
                    public void onSuccess() {

                    }

                    @Override
                    public void onError(Exception e) {

                        Picasso.get()
                                .load(imgurl)
                                .into(holderImg);
                    }
                });
    }
}

This is my Main Activity

public class MainActivity extends AppCompatActivity {

    DealsAdapter dealsAdapter;
    RecyclerView recyclerView;
    static int countMsg = 0;
    LinearLayout gifLayout;
    CounterFab btnFloat;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        recyclerView = findViewById(R.id.recyclerview);
        gifLayout = findViewById(R.id.gifLayout);
        btnFloat = findViewById(R.id.btnFloat);

        LinearLayoutManager layoutManager = new LinearLayoutManager(this);
        layoutManager.setStackFromEnd(true);
        recyclerView.setLayoutManager(layoutManager);

        Query query = FirebaseDatabase.getInstance().getReference().child("list");

        FirebaseRecyclerOptions<DealsModel> options =
                new FirebaseRecyclerOptions.Builder<DealsModel>()
                        .setQuery(query, DealsModel.class)
                        .build();

        dealsAdapter = new DealsAdapter(options);
        recyclerView.setAdapter(dealsAdapter);

}

    @Override
    protected void onStart() {
        super.onStart();
        dealsAdapter.startListening();
    }

    @Override
    protected void onStop() {
        super.onStop();
        dealsAdapter.stopListening();
    }
}

0 Answers0